헬로, 안드로이드 13 주차 SQL 활용하기 (2) 강대기동서대학교컴퓨터정보공학부

Similar documents
슬라이드 1

어댑터뷰

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

학습목표 SQLite 가뭔지알고, 이를사용할줄안다. SQL 의기본적인사용법들을안다. SQLite 을이용해기본적인데이터베이스응용프로그램을작성할수있다. 행을추가하는기본적인데이터베이스응용프로그램을작성할수있다. 쿼리를실행하는기본적인데이터베이스응용프로그램을작성할수있다. 쿼리결과

학습목표 선언하여디자인을하는방법을이해하고, 실행할수있다. 시작화면을만드는방법과대체리소스를사용하는방법을이해하고실행할수있다. About 과같은상자를구현하고, 테마를적용하는법을이해하고실행할수있다.

쉽게 풀어쓴 C 프로그래밊

13ÀåÃß°¡ºÐ

슬라이드 1

슬라이드 1

( )부록

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

이것은리스트뷰의 setadapter 메소드에잘표현되어있습니다. setadapter 는리스트뷰에사용할데이터객체를넘겨주는메소드입니다. 일반적으로생각한다면 ArrayAdapter 객체를생성하여사용할데이터를저장할것이고데이터가저장된 ArrayAdapter 객체를 setadapt

슬라이드 1

2 Application Name: Day10_yhg <LinearLayout android:layout_weight="3" > /> an

9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요

01장

학습목표 메뉴를추가하는방법을이해하고실습할수있다. 프로그램의기본설정 (settings) 을정의하는방법을알고실습할수있다. 대화상자를여는방법을알고실습할수있다. 로그메시지로디버깅하는방법을이해한다. 디버거로디버깅하는방법을이해한다.

03장

[ 그림 7-1] 프로젝트 res 폴더 이미지뷰 [ 예제 7-1] 이미지뷰 1 <LinearLayout 2 ~~~~ 중간생략 ~~~~ 3 android:orientation="vertical" > 4 <ImageView

DBMS & SQL Server Installation Database Laboratory

Spring Boot/JDBC JdbcTemplate/CRUD 예제

안드로이드2_14

JAVA PROGRAMMING 실습 08.다형성

슬라이드 1

Microsoft PowerPoint App Fundamentals[Part1](1.0h).pptx

제8장 자바 GUI 프로그래밍 II

Microsoft PowerPoint - 04-UDP Programming.ppt

gnu-lee-oop-kor-lec06-3-chap7

Daum 카페

PowerPoint Presentation

슬라이드 1

JVM 메모리구조

rmi_박준용_final.PDF

MVVM 패턴의 이해

Microsoft PowerPoint - CSharp-10-예외처리

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

리니어레이아웃 - 2 -

슬라이드 1

12Àå PDF

Microsoft PowerPoint App Fundamentals[Part1].pptx

TipssoftAppActivity.java // 기본소스파일 main.xml // 배치와구성에관련된리소스파일 string.xml // 프로그램에서사용할문자열에관련된리소스파일 컴파일을하고나면 r.java 라는소스파일이하나추가되는데이파일은리소스파일을소스파일에서이용할수있도

PowerPoint Presentation

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

슬라이드 1

신림프로그래머_클린코드.key

OpenCV와 함께하는 컴퓨터 비전 프로그래밍 캠프

50_1953.pdf

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

슬라이드 1

PowerPoint 프레젠테이션

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

MySQL-.. 1

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

PowerPoint 프레젠테이션

Microsoft PowerPoint - 2강

<4D F736F F F696E74202D20B5A5C0CCC5CDBAA3C0CCBDBA5F3130C1D6C2F75F32C2F7BDC32E >

Spring Data JPA Many To Many 양방향 관계 예제

PowerPoint Presentation

오핀 (OFIN) SDK Guide Fintech Mobile SDK Guide - Android V 1.0 OPPFLIB 1

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Android Master Key Vulnerability

PowerPoint 프레젠테이션

JMF3_심빈구.PDF

Microsoft PowerPoint - 4주차_Android_UI구현.ppt [호환 모드]

JAVA PROGRAMMING 실습 09. 예외처리

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

PowerPoint 프레젠테이션

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

PowerPoint Presentation

Design Issues

슬라이드 1

JAVA PROGRAMMING 실습 05. 객체의 활용

OOP 소개

Microsoft PowerPoint - Java7.pptx

제11장 프로세스와 쓰레드

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

fundamentalOfCommandPattern_calmglow_pattern_jstorm_1.0_f…

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

PowerPoint Presentation

Microsoft PowerPoint App Fundamentals[Part2].pptx

윈도우시스템프로그래밍

2장 변수와 프로시저 작성하기

[Brochure] KOR_TunA

PowerPoint Template

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

ThisJava ..

Microsoft PowerPoint - hci2-lecture12 [호환 모드]

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

09-interface.key

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - 14주차 강의자료

Transcription:

헬로, 안드로이드 13 주차 SQL 활용하기 (2) 강대기동서대학교컴퓨터정보공학부

학습목표 데이터바인딩을통해데이터소스에해당하는데이터베이스와뷰에해당하는액티비티를연결한데이터베이스응용프로그램을작성할수있다. 안드로이드내의다른어플리케이션의데이터에접근하기위해제공되는 ContentProvider 를사용할수있다. 자신의어플리케이션에서다른어플리케이션으로의데이터제공을위한 ContentProvider 를구현할수있다.

차례 데이터바인딩 ContentProvider 사용하기 ContentProvider 구현하기 요약 퀴즈 연습문제

데이터바인딩 몇줄의코드로데이터 ( 또는모델 ) 과뷰를연결 모델은상황에따라다르게해석되나, ( 예를들어패션모델, 모델하우스, 성능평가모델, 기계학습모델등 ) 데이터베이스에서는데이터모델, 즉스키마와비슷하게해석됨 데이터바인딩을위해, Events 예제를수정하여데이터베이스쿼리결과에엮인 ListView 를사용하도록함

Cursor-Adapter-Activity 간의연결에대 한개인적인견해 ASP.NET 이나 C#.NET 의데이터베이스응용을보면, DataTable 방식과 DataSet 방식이있는데, 지난시간의예제코드는 DataTable 방식에가깝고, 이번시간의 ContentProvider 를사용하는예제코드는 DataSet 방식에가까움 데이터 - 컨트롤 - 뷰의 3-tier 구조와비슷하게, 뷰에해당하는 Activity 에대해데이터를의미하는 Cursor 를지정해주는이러한방식은, 이미, 예를들어, ASP.NET 등에서활발히사용되고있음 본안드로이드예제에서소개된방식은오히려진정한 3-tier 분할이안되고있음. ASP.NET 의방식이더편하고진보된방식임. ASP.NET 에선 ASP 를나타내는.aspx 파일 ( 뷰 ) 과 C# 을나타내는.cs 파일 ( 콘트롤 ) 이연결되어있으며, 데이터소스를.aspx 에서직접지정할수있음 차기안드로이드설계에반영할필요가있음 또한, 차기안드로이드설계에서는, 이런경우 Activity 를확장해서 ListActivity 로사용하는것보다 View 를확장해서 ListView 를사용하게하는게더이치에맞을수도있음. ( 그러나 ListView 는이미가로방향스크롤되는뷰로사용되고있는문제가있기는함 ) 이에따라, Java 소스에서뿐만아니라, 뷰를의미하는 XML 파일에서직접데이터소스를지정할수있도록하는게좋음

Events.showEvents() 를수정 Events 는 Activity 를확장한 ListActivity 로선언 데이터베이스테이블에는, Cursor 클래스를통해레코드들에접근함 Cursor 를받아서, 사용자가볼수있도록출력함 ListActivity 에는임의의데이터소스를 Adapter 를통해연결해줄수있음. 이를위해 setlistadapter() 메서드사용 여기서는 Adapter 를확장한 SimpleCursorAdapter 사용

SimpleCursorAdapter 어댑터는뷰와소스를연결하는중간다리역할 웹서비스이용하기의 Translate.setAdapters() 에서이미사용했었음 그예제에서데이터소스는 XML 배열이므로 ArrayAdapter 를사용했음 여기서는데이터베이스쿼리에서나온 Cursor 객체이므로 SimpleCursorAdapter 사용 매개변수 context 현재 Activity 의참조 layout 하나의목록아이템을정의하는리소스 (layout/item.xml) cursor 데이터집합커서 from 데이터가나오는열이름목록 to 데이터가들어갈뷰목록

layout/item.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:padding="10sp"> <TextView android:id="@+id/rowid" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/rowidcolon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=": " android:layout_torightof="@id/rowid" /> <TextView android:id="@+id/time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_torightof="@id/rowidcolon" /> <TextView android:id="@+id/timecolon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=": " android:layout_torightof="@id/time" /> <TextView android:id="@+id/title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:ellipsize="end" android:singleline="true" android:textstyle="italic" android:layout_torightof="@id/timecolon" /> </RelativeLayout>

layout/main.xml list 와 empty 라는 built-in ID 사용 목록에아이템이있다면, @android:id/list 뷰가보이고, 아니면 @android:id/empty 뷰가보임 데이터바인딩을사용하는본예제에서이벤트데이터베이스에데이터를추가하거나, 데이터베이스를직접보는방법은? ContentProvider 를사용하는것

layout/main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/ res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@android:id/list" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@android:id/empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/empty" /> </LinearLayout>

ContentProvider 사용하기 안드로이드보안모델로인해, 원칙적으로한어플리케이션이작성한파일은다른어플리케이션에의해읽고쓸수없음 각프로그램은개별리눅스사용자 ID 와데이터디렉토리 (/data/data/<package name>) 와보안된메모리공간을가짐 안드로이드프로그램들은다음두가지로소통함 Inter-Process Communication Android Interface Definition Language (AIDL) 와 IBinder 인터페이스 ContentProvider 프로세스는시스템에자신이어떤종류데이터의제공자인지등록함. 그정보가요청되면안드로이드는적합한방식으로컨텐츠를쿼리또는수정하기위해고정 API 를통해호출함

ContentProvider URI ContentProvider 에의해관리되는정보는다음과같은 URI 를통해나타내짐 content://<authority>/<path>/<id> content authority path id 안드로이드는다음과같은내장된 ContentProvider 가있음 content://browser content://contacts content://media content://settings 본예제의 Event 제공자로는다음의 URI 를사용 content://org.example.events/events/3 _id=3 인단일이벤트 content://org.example.events/events/ 모든이벤트

Constants.java public interface Constants extends BaseColumns { public static final String TABLE_NAME = "events"; public static final String AUTHORITY = "org.example.events"; public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/" + TABLE_NAME); } // Columns in the Events database public static final String TIME = "time"; public static final String TITLE = "title";

Event.onCreate() 추적할데이터베이스객체가없어짐 try catch 블록필요없으며, EventData 참조없어짐 @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); addevent("hello, Android!"); Cursor cursor = getevents(); showevents(cursor); }

행추가하기 (addevent()) addevent() 메서드를통해데이터베이스에새로운행을추가함 시간은현재시간 제목은주어진 string 변수 CONTENT_URI 는 Constants.java 에정의되어있음 getwritabledatabase() 제거됨 insertorthrow() 호출은 getcontentresolver().insert() 로대체됨

쿼리실행하기 (getevents()) Cursor 를채워주기위한 (populate) Activity.managedQuery() 실행으로충분함 데이터베이스에대한모든참조를제거함으로써, Events 클라이언트를 Events 데이터제공자로부터분리함

Events.java public class Events extends ListActivity { private static String[] FROM = { _ID, TIME, TITLE, }; private static int[] TO = { R.id.rowid, R.id.time, R.id.title, }; private static String ORDER_BY = TIME + " DESC"; @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); addevent("hello, Android!"); Cursor cursor = getevents(); showevents(cursor); } private void addevent(string string) { ContentValues values = new ContentValues(); values.put(time, System.currentTimeMillis()); values.put(title, string); getcontentresolver().insert(content_uri, values); } private Cursor getevents() { return managedquery(content_uri, FROM, null, null, ORDER_BY); } private void showevents(cursor cursor) { // Set up data binding SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.item, cursor, FROM, TO); setlistadapter(adapter); } }

ContentProvider 구현하기 AndroidManifest.xml 에서 ContentProvider 추가 <provider android:name="eventsprovider" android:authorities="org.example.events" /> android:name 클래스이름 android:authorities 컨텐츠 URI 에사용되는문자열 ContentProvider 를확장하는 EventsProvider 클래스생성 관습에따라 MIME 타입에 org.example 대신 vnd.example 사용 EventsProvider 는두종류의데이터를다룸 CONTENT_TYPE 이벤트들의디렉토리의 MIME 타입 CONTENT_ITEM_TYPE 단일이벤트의 MIME 타입, ID 수준까지상세히지정할수있음

EventsProvider.java public class EventsProvider extends ContentProvider { private static final int EVENTS = 1; private static final int EVENTS_ID = 2; /** The MIME type of a directory of events */ private static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.example.event"; /** The MIME type of a single event */ private static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.example.event"; private EventsData events; private UriMatcher urimatcher; //...

요약 데이터바인딩을통해데이터소스에해당하는데이터베이스와뷰에해당하는액티비티를연결한데이터베이스응용프로그램을작성해보았다. 안드로이드내의다른어플리케이션의데이터에접근하기위해제공되는 ContentProvider 를사용하는방법에대해알아보았다. 자신의어플리케이션에서다른어플리케이션으로의데이터제공을위한 ContentProvider 를구현해보았다.

퀴즈 어댑터란무엇인가? 그리고커서란무엇인가? SimpleCursorAdapter 는무엇을위한클래스인가? 무엇을위한어댑터인가? XML 입력을위해서는어떤어댑터를사용해야하는가? 안드로이드에서다른어플리케이션이사용하는파일에접근하려면어떻게해야하는가? ContentProvider 에서사용하는 URI 는어떤구조인가? 안드로이드가기본적으로제공하는 ContentProvider 용 URI 는무엇이있는가? ContentProvider 를구현하기위해해야할일들은무엇이있는가? MIME 는무슨뜻인가?

연습문제 본장의예제를확장하여이벤트데이터레코드에새로운컬럼을추가하고, 사용자가이벤트를선택하면, 이벤트에대한자세한정보를보여주는뷰어를여는프로그램을작성하라. 사용자가이벤트를선택하면, 그이벤트정보를특정이메일로보내는프로그램을작성하라. 각각의이벤트에대해사용자가별점을줄수있는프로그램일작성하라. 사용자가이벤트를삭제할수있는프로그램을작성하라. 안드로이드에서데이터를저장하는또다른방법인 db4o 에대해알아보자.