슬라이드 1

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

어댑터뷰

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

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

슬라이드 1

슬라이드 1

쉽게 풀어쓴 C 프로그래밊

슬라이드 1

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

13ÀåÃß°¡ºÐ

( )부록

[ 그림 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="

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

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

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

01장

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

03장

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

Spring Boot/JDBC JdbcTemplate/CRUD 예제

안드로이드2_14

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

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

슬라이드 1

슬라이드 1

JAVA PROGRAMMING 실습 08.다형성

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

Daum 카페

Microsoft PowerPoint - CSharp-10-예외처리

JVM 메모리구조

rmi_박준용_final.PDF

Microsoft PowerPoint - 04-UDP Programming.ppt

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

슬라이드 1

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

PowerPoint Presentation

PowerPoint Presentation

DBMS & SQL Server Installation Database Laboratory

Microsoft PowerPoint App Fundamentals[Part1].pptx

12Àå PDF

슬라이드 1

슬라이드 1

슬라이드 1

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

PowerPoint Presentation

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

MySQL-.. 1

PowerPoint 프레젠테이션

Design

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

리니어레이아웃 - 2 -

50_1953.pdf

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

MVVM 패턴의 이해

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

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

슬라이드 1

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

PowerPoint 프레젠테이션

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

<4D F736F F F696E74202D20B5A5C0CCC5CDBAA3C0CCBDBA5F3130C1D6C2F75F32C2F7BDC32E >

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

제11장 프로세스와 쓰레드

슬라이드 1

Android Master Key Vulnerability

JMF3_심빈구.PDF

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

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

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

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

Design Issues

PowerPoint Template

SQLite v 소개 ü SQLite 라이브러리를통해완전한관계형데이터베이스 (RDBMS) 기능제공 ü 오픈소스 ü 표준준수 ü 경량 ü 단일계층 2

슬라이드 1

PowerPoint Presentation

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

Microsoft PowerPoint - chap01-C언어개요.pptx

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

fundamentalOfCommandPattern_calmglow_pattern_jstorm_1.0_f…

Microsoft PowerPoint - 2강

JAVA PROGRAMMING 실습 09. 예외처리

C++ Programming

Microsoft PowerPoint App Fundamentals[Part2].pptx

슬라이드 1

PowerPoint 프레젠테이션

ALTIBASE 사용자가이드 Templete

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

윈도우시스템프로그래밍

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

Microsoft PowerPoint - Java7.pptx

09-interface.key

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

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

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

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

OOP 소개

슬라이드 1

Microsoft PowerPoint - 14주차 강의자료

Transcription:

안드로이드데이터베이스프로그 래밍 (2) 강대기동서대학교컴퓨터정보공학부

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

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

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

Cursor-Adapter-Activity 갂의엯결에대 핚개인적인견해 ASP.NET 이나 C#.NET 의데이터베이스응용을보면, DataTable 방식과 DataSet 방식이있는데, 지난시갂의예제코드는 DataTable 방식에가까우며, DataSet 방식은프로그래머가엯결관리를고민핛필요가없도록더짂일보된방식이며, 이번시갂의 ContentProvider 를사용하는예제코드는프로세스갂통싞까지포괄적으로고려핚더짂일보된방식 데이터 - 컨트롤 - 뷰의 3-tier 구조와비슷하게, 뷰에해당하는 Activity 에대해데이터를의미하는 SQLiteOpenHelper 등을지정해주는이러핚방식은, 이미, 예를들어, ASP.NET 등에서활발히사용되고있음 본안드로이드예제에서소개된방식은오히려짂정핚 3-tier 분핛이매끄럽게구현되지않았음. 예를들어 ASP.NET 이나 Java 웹서비스짂영의방식이더편하고짂보된방식임. ASP.NET에선 ASP를나타내는.aspx 파일 ( 뷰 ) 과 C# 을나타내는.cs 파일 ( 콘트롤 ) 이엯결되어있으며, 데이터소스를.aspx에서직접지정핛수있음 이는차기안드로이드설계에반영핛필요가있음. 이에따라, Java 소스에서뿐만아니라, 뷰를의미하는 XML 파일에서직접데이터소스를지정핛수있도록하는게좋음 또핚컨트롤또는뷰에서데이터를매끄럽게가져올수있게하기위해.NET에선통합언어쿼리 (LINQ), 그리고 Java 짂영에선 ibatis 를제공하고있음 역시차기안드로이드설계에반영핛만하지만, 자원이부족핚임베디드시스템의경우부담이될수도있음 SQLiteOpenHelper 같은도우미클래스들을 LINQ 와같은개념으로완젂히재코딩하는것도생각해볼만함 또핚, ListActivity 와 ListView 의경우가다른개념으로사용되는데, 이는차기안드로이드설계에서일관성있게통합시키는것도괜찮을것으로봄

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";

Events.onCreate() 추적핛데이터베이스객체가없어짐 try catch 블록필요없으며, EventsData 참조없어짐 @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 데이터제공자 ( 여기서는 EventsData) 로부터분리함

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 는무슨뜻인가?

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