2014년 3월 25일 화요일

[안드로이드강좌] 안드로이드 예제 강좌 1 (2. Tutorial 예제 1 Notepadv1)[웹표준/웹접근성/HTML5/jQUERY교육잘하는곳/제이쿼리,JAVASCRIPT교육추천/jQUERY,CSS3학원추천/HTML5학원교육추천/JQUERY,HTML5교육학원추천/실무웹표준교육/웹퍼블리싱/웹접근성교육]

[안드로이드강좌] 안드로이드 예제 강좌 1 (2. Tutorial 예제 1 Notepadv1)[웹표준/웹접근성/HTML5/jQUERY교육잘하는곳/제이쿼리,JAVASCRIPT교육추천/jQUERY,CSS3학원추천/HTML5학원교육추천/JQUERY,HTML5교육학원추천/실무웹표준교육/웹퍼블리싱/웹접근성교육]


이 들은 http://code.google.com/android/intro/tutorial-ex1.html 의 Android tutorial 예제 1번을 하며 배운것을 정리한 것입니다.
첫번째 HelloAndroid에 이어 이번 예제에서는
1. database를 어떻게 다루는지
2. Activity에 의해 발생하는 이벤트를 어떻게 다루는지 를 배웁니다.
이번 Notepadv1 예제에서는 노트패드에 노트 아이템을 만드는 기능만 집어 넣고
앞으로 Notepadv2, v3로 가면서 만든 노트를 수정하고 지우는 등의 여러 기능을 집어 넣게 될겁니다.
일단 한번 상상을 해봅니다.
위에 있는 기능을 수행하기 위해 어떻게 자세한 절차가 어떻게 진행되어야 할지.
1. database내에 있는 노트들의 리스트가 보여져야 합니다. 그리하며 어떤 화면에 그것들이 쭉 나열될겁니다.
2. 일단 노트를 만드는 스크린이 있어야 할 겁니다. 그 스크린에서 노트를 만든다는 명령이 넘어오고 이 명령에 의해 노트의 제목이 만들어 집니다.
2. 이후 database를 건들게 될겁니다. 만들어진 노트가 그 알맹이는 없지만 최소한 그 제목이라도 database에 저장되어야 하기 때문입니다. 이 과정에서 당연히 SQLite로 INSERT 주문이 던져질것 입니다.
이제 예제 답안을 봅니다.
http://code.google.com/android/intro/codelab/NotepadCodeLab.zip 을 받아 압축을 풀고
예제 답안을 보기위해 NotepadCOdeLab/Notepadv1Solution에 있습니다.
먼저 src/com/android/demo/notepad1을 가서 자바 소스들을 봅니다.
(1) Notepadv1.java와 (2) NotesDbAdapter.java, (3) R.java의 세개 파일이 있습니다.
1. Notepadv1.java는 노트 리스트를 보고 만드는 스크린과 명령에 관련되어 보여집니다.
2. NotesDbAdapter.java 는 데이터베이스관련된 코드들이 있는것으로 보입니다.
3. R.java는 도무지 뭔지 모르겠습니다.
.
이제 예제 답안을 보면서 예측한것이 얼마나 맞았나 봅니다.
Notepadv1.java에는 세가지 중요한 Activity class에서 온 메소드들이 있습니다.
1. onCreate - 스크린이 뜨면서 불러지는 메소드입니다. 흔히 프로그램 실행 직후 초기화 과정에 수행되는 것들은 여기 들어가야 할겁니다.
2. onCreateOptionsMenu - 시스템이 메뉴 아이템을 만드는 과정에서 부르는 메소드입니다. 변수로 메뉴 오브젝트가 넘어감을 볼수있습니다. 노트 생성, 노트수정, 노트삭제 같은것이 들어갈 걸로 생각해 볼 수있습니다.
3. onOptionsItemSelected - 메뉴에서 무었이 선택되어지면 불려지는 메소드입니다. 변수에보면 메뉴 오브젝트와 아이템이 같이 넘어 감이 보입니다. 지극히 당연합니다.
.
이밖에 두가지 메소드가 있습니다.
1. fillData: 이 메소드가 최초 불려지는곳은 onCreate입니다 스크린이 만들어지며 데이터베이스의 노트들을 쭉 읽어 스크린에 뿌려주는 놈입니다.
2. createNote: 이눔이 불려질 곳은 당연히 onOptionsItemSelected 입니다. 노트를 만드라는 아이템이 메뉴에서 선택되고 이에 따라 이눔이 노트를 만듭니다.
NotesDbAdapter.java 를 보기전에 데이터베이스를 상대하는 프로그램이 흔히 가진 기본 기능을 생각해 봅니다.
그리고 여기에 메소드들을 하나하나 연결해 봅니다.
1. DATABASE OPEN - open()
2. INSERT - createNote()
3. UPDATE - updateNote()
4. DELETE - deleteNote()
5. SELECT - fetchAllNotes() 와 fetchNote()
6. DATABASE CLOSE - close()
좋습니다. 쉽게 쉽게 대응이 됩니다.
그럼 이제 남은것은 DatabaseHelper class 와 NotesDbAdapter Constructor입니다. 이건 뭔지모르겠습니다. 일단 패스합니다.
프로그램 상단의 변수선언부를 보니 다음과 같은 데이터베이스 정보를 봅니다.
데이터베이스 이름: data
테이블이름: notes
필드이름: _id, title, body
이 소스코드에서 주시할점이 있다면
1. 데이터를 넣다뺏다하는 법이 mDb를 통해하는데 독특합니다.
일단 mDb는 이렿게 선언합니다.
mDb = new DatabaseHelper(mCtx).getWritableDatabase();
그리고 이렇게 활용합니다.
mDb.insert(DATABASE_TABLE, null, initialValues)mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null)mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null)mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE,KEY_BODY}, null, null, null, null, null);mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,KEY_TITLE, KEY_BODY}, KEY_ROWID + "=" + rowId, null,null, null, null, null) 
2. query후에 query한 데이터를 넘기지않고 Cursor란것을 넘깁니다. 이건 뭔지 잘 모르겠습니다.
.
점점 더 어려워 집니다. 머리에 쥐납니다.
그래도 갑니다. 다음은 예제1번 직접만들어보는 겁니다. 
 



댓글 없음:

댓글 쓰기