[NEXT] Android 개발 경험 프로젝트 3일차 (Database)
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

[NEXT] Android 개발 경험 프로젝트 3일차 (Database)

  • 3,535 views
Uploaded on

NEXTGRAM을 만들기 위한 여정 3일차 ...

NEXTGRAM을 만들기 위한 여정 3일차
Android Database 프로그래밍을 맛 보는 수업입니다.

Written by 정문철
Reviewed by 손영수

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,535
On Slideshare
3,477
From Embeds
58
Number of Embeds
3

Actions

Shares
Downloads
84
Comments
0
Likes
8

Embeds 58

http://www.heej.net 54
http://nigayo.com 3
http://www.nigayo.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. ANDROID
  • 2.   -
  • 3.   DAY
  • 4.   3.
  • 5.   
  • 6.   
  • 7.    DATABASE를
  • 8.   만나러
  • 9.   가다.
  • 10. 학습목표 이 학습을 마치면… -SQLite를 사용하여 앱 내부의 데이터베이스를 사용하여 자료를 보관할 수 있습니다. ! -JSON방식의 파일을 파싱하여 안드로이드 내부에서 활용 할 수 있습니다.
  • 11. 이때까지 HTML로 구현한 게시판을 안드로이드 플랫폼에서 다시 구현을 합니다.
  • 12. 하지만 서버(백엔드)부분은 공통적으로 이용을 하므로 클라이언트(프론트엔드) 부분만 다시 만들면 됩니다.
  • 13. 지금까지 버튼, 텍스트뷰 등 각종 위젯이나 커스텀 어뎁터를 사용한 리스트 뷰등 UI관련된 API들을 사용법을 배웠는데 ! 지금부터는 네트워킹,DB등의 여러 부분을 같이?! 해야 합니다.
  • 14. 앱 기획 안드로이드로 웹에 있는 게시글들을 보고 원하는 글을 보거나 사진을 올릴수 있는 게시판 앱을 만들고 싶다! ! -NEXTAGRAM-
  • 15. 메인화면 메인화면에는 게시글들을 볼 수 있고…
  • 16. 메인화면 게시글 하나를 터치하면 내용을 볼 수 있고. 글 읽기
  • 17. 메인화면 글쓰기 버튼을 터치하면 게시글 입력 창이 나오고 글 읽기
  • 18. 메인화면 앨범에 있는 사진을 선택하고 글 읽기
  • 19. 메인화면 글 쓰기 글쓰기 버튼을 누르면 글이 업로드되서 새로 리스트에 추가가 된다. 글 읽기
  • 20. 메인화면 글 쓰기 글 읽기
  • 21. SERVER Main 이때까지 만든 서버 Proxy 안드로이드 메인 클래스 (게시글 목록) ProxyUP 서버 데이터 로드 클래스 서버 데이터 업로드 클래스 Dao 안드로이드폰 자체의 DB(SQLite)에 데이터를 관리하는 클래스
  • 22. SERVER Main 1)데이터 요청 Proxy ProxyUP Dao
  • 23. SERVER Main 2)서버로 부터JSON으로 데이터 받음 1)데이터 요청 Proxy ProxyUP Dao
  • 24. SERVER Main 2)서버로 부터JSON으로 데이터 받음 1)데이터 요청 Proxy ProxyUP 3)서버로부터 받은 데이터를 전달 Dao
  • 25. SERVER Main 2)서버로 부터JSON으로 데이터 받음 1)데이터 요청 Proxy ProxyUP 3)서버로부터 받은 데이터를 전달 Dao 4)JSON 데이터를 Dao에 전달
  • 26. SERVER Main 2)서버로 부터JSON으로 데이터 받음 1)데이터 요청 Proxy ProxyUP 3)서버로부터 받은 데이터를 전달 Dao 4)JSON 데이터를 Dao에 전달 5)JSON 데이터를 파싱하여 SQLite에 insert하기
  • 27. SERVER Main 2)서버로 부터JSON으로 데이터 받음 1)데이터 요청 Proxy ProxyUP 3)서버로부터 받은 데이터를 전달 Dao 4)JSON 데이터를 Dao에 전달 5)JSON 데이터를 파싱하여 SQLite에 insert하기 6)Dao에 저장되어 있는 게시글 데이터를 가져오기
  • 28. SERVER Main 2)서버로 부터JSON으로 데이터 받음 1)데이터 요청 Proxy ProxyUP 3)서버로부터 받은 데이터를 전달 Dao 4)JSON 데이터를 Dao에 전달 7)Dao로 부터 가져온 데이터를 리스트에 표시 5)JSON 데이터를 파싱하여 SQLite에 insert하기 6)Dao에 저장되어 있는 게시글 데이터를 가져오기
  • 29. SERVER Main Proxy 8)글 입력 창으로 이동 ProxyUP ArticleWrite Dao 7)Dao로 부터 가져온 데이터를 리스트에 표시
  • 30. SERVER Main Proxy 8)글 입력 창으로 이동 ProxyUP ArticleWrite 9)글 제목,내용, 사진 경로등을 전달 Dao 7)Dao로 부터 가져온 데이터를 리스트에 표시
  • 31. SERVER Main 10)post방식으로 서버에 사진 전송 Proxy 8)글 입력 창으로 이동 ProxyUP ArticleWrite 9)글 제목,내용, 사진 경로등을 전달 Dao 7)Dao로 부터 가져온 데이터를 리스트에 표시
  • 32. Q) 불필요한 구조가 많은것 같은데? ! A) Main에서 Proxy로 갔다 다시 메인으로 와서 Dao로 갔다가 또 Main으로 돌아 오는 등 불필요한 부분이 있습니다. ! 이것은 절차지향적인 설계로 보다 쉽게!? 학습을 위해서 입니다. Advanced를 목표로 하는 학생은 독자적으로 설계를 해서 구현을 하셔도 무방합니다.
  • 33. Advanced한 설계를 원하시는 분은 구글에서 권장한 이 방법을 참고해 주세요 http://~~~
  • 34. 네 많이 복잡하고 어려워 보입니다…
  • 35. 하지만 천리길도 한걸음 부터! ! 그나마 익숙?! 한 DB를 먼저 구현해 보겠습니다.
  • 36. Main DAO (Data Access Objects) 클래스 Dao라는 클래스를 만들어 데이터를 저장하고 불러오는 과정을 먼저 구현해 보겠습니다. SQLite 데이터베이스를 관리하는 클래스 Dao 4)JSON 데이터를 Dao에 전달 5)JSON 데이터를 파싱하여 SQLite에 insert하기 6)Dao에 저장되어 있는 게시글 데이터를 가져오기
  • 37. Dao 5)JSON 데이터를 파싱하여 SQLite에 insert하기 Q) DB를 왜 사용하나요? ! A) 안드로이드 자체의 DB를 사용함으로써 네트워크가 불안정한 상태에서도 게시글의 내용을
 화면에 표시를 하는 것이 가능합니다. ! 특히 해외는 이제서야 3G가 보급되기 시작되고 불안정한 곳도 많기 때문에 꼭 네트워크가 불안정한 상태를 가정하고 설계를 해야합니다. ! 그 외에도 앱 실행 후 빠르게 게시글 내용이 보이는등 여러 장점이 있습니다.
  • 38. 안드로이드 SQLite사용하기 SQLITE CRUD Create(생성), Read(읽기), Update(갱신), Delete(삭제)
  • 39. SQLite란? SQLite는 MySQL같은 데이터베이스 관리 시스템으로 ! 서버가 아니라 응용 프로그램에 넣어 사용하는 비교적 가벼운 데이터베이스로 대규모 작업에는 적합하지 않지만, 중소 규모라면 속도에 손색이 없다. ! 또 API는 단순히 라이브러리를 호출하는 것만 있으며 데이터를 저장하는 데 하나의 파일만을 사용한다. ! 안드로이드에는 기본 탑재되어 있어 손쉽게 이용이 가능하다.
  • 40. SQLite란(2)? SQLiteDB는 파일하나로 구성되어 있으며 쉽게 DB통째로 복사 및 이동이 가능합니다. ! 이번예제에서 사용하는 방법은 /data/data/<package_name>/databases/<DB이름>.db 에 저장이 됩니다. ! 따로 WRITE_EXTERNAL_STORAGE 권한이 필요없으나 루팅이 안되어 있는 디바이스에서는 data폴더에 접근을 하지 못합니다. ! SQLite파일을 보고 싶으시면 DDMS나 루팅이 되어있는 디바이스, AVD(Genymotion)상에서 확인이 가능 합니다.
  • 41. SQLite DB 생성하기 SQLite에서는 데이터를 넣기 위해서는 Table생성보다 먼저 데이터 베이스를 먼저 생성을 해야 합니다. SqLiteDatabase를 import한 다음 openOrCreateDatabase를 사용하여 DB파일을 생성거나 DB파일을 읽어줍니다.
  • 42. 안드로이드에서 제공하는 DB 메소드들이 있지만 JDBC와 동일한 방식으로 DB제어방법을 소개합니다.
  • 43. 테이블 생성 테이블이름 컬럼들… sql문은 MySql과 동일하며 execSQL()로 실행합니다. ! (AutoIncrement ID와 TITLE을 가지는 테이블) 주의! sqlite에서는 AUTO_INCREMENT가 아니라 AUTOINCREMENT입니다.
  • 44. 테이블 삭제 테이블이름 sql문은 MySql과 동일하며 execSQL()로 실행합니다.
  • 45. 데이터 입력 테이블이름 컬럼명 sql문은 MySql과 동일하며 execSQL()로 실행합니다. 입력할 데이터
  • 46. 데이터 삭제 테이블이름 ID값이 동일한 것을 삭제 sql문은 MySql과 동일하며 execSQL()로 실행합니다.
  • 47. 데이터 수정 테이블이름 수정할 데이터 sql문은 MySql과 동일하며 execSQL()로 실행합니다. 수정할 데이터의 ID
  • 48. 데이터 읽기 sql문은 MySql과 동일하나 Cursor를 만들고 rawQuery()로 실행합니다.
  • 49. Cursor Cursor는 DB의 한행 한행씩 읽어오는데 편리하도록 만들어진 인터페이스로 while문으로 데이터가 끝날때까지 반복작업을 할 수 있습니다.
  • 50. Cursor(2) Cursor로부터 getString(columnIndex), getInt(columnIndex)로 각 행마다의 데이터를 가져올 수 있습니다. 0 ! 인자는 컬럼 번호를 뜻합니다. 1 2 3
  • 51. Cursor(3) Cursor는 꼭 .close()를 해주지 않으면 메모리 누수가 발생하므로 꼭 사용후에는 닫아줍시다.
  • 52. DB가 오류나면 앱이 바로 종료되요!
  • 53. TRY CATCH! 중복으로 테이블을 생성한다던지 유니크인 칼럼에 중복데이터를 넣는다던지 등등 ! try catch문으로 오류가 발생하여도 문제가 없도록 예외처리를 해서 앱이 멈추지 않고 계속 진행하도록 합니다.
  • 54. 테이블 중복 확인을 위한 쿼리로 보호 테이블을 중복 생성을 하려고 하면 오류가 발생합니다. CREATE TABLE하기 전에 테이블이 중복이 있는지 확인하는 쿼리를 날리던지
  • 55. 아니면 create table if not exists 등으로 쿼리를 잘 짜야하던지 등등 ! 여러 상황이 있을 수 있고 여러 해결 방법이 있지만 그래도 Try Catch는 생활화 합시다.
  • 56. 안드로이드에서 DB를 사용할 때에는 일반적인 SQL문을 직접 작성해서 질의를 할 수 있지만 안드로이드 API를 사용할 수도 있습니다. ! sql문을 입력하는 것과 차이는 없지만 api를 사용하면 컬럼명이나 기타 변경점에 유연하게 대응할 수 있습니다. ! 학습 진행에 여유가 있으신 분은 http://developer.android.com/training/basics/data-storage/databases.html 을 참고해 주세요
  • 57. 이제 본격적으로 게시판 앱을 만들어보겠습니다!
  • 58. 메인화면 글 쓰기 저번 과제로 레이아웃을 만들었던 프로젝트에서 작업을 시작합니다 글 읽기
  • 59. Main Dao클래스를 만들고 DB에 JSON데이터를 저장하는 방법을 배워봅니다. DAO (Data Access Objects) 클래스 SQLite 데이터베이스를 관리하는 클래스 Dao 4)JSON 데이터를 Dao에 전달 5)JSON 데이터를 파싱하여 SQLite에 insert하기 6)Dao에 저장되어 있는 게시글 데이터를 가져오기
  • 60. 마우스 오른쪽 클릭! 기존에 작업하시던 프로젝트에서 새 클래스를 만들어줍시다.
  • 61. 클래스명은 Dao (Data Access Objects)로 하였습니다.
  • 62. 무사히?! 빈 클래스가 생겼습니다.
  • 63. DB를 제어하기 위해서는 Context가 필요합니다. 생성자를 만들고 Context를 받아줍니다.
  • 64. SQLiteDatabase의 인스턴스를 만들고 openOrCreateDatabase()로 초기화를 합니다.
  • 65. 이제 DB 테이블을 만들어야 합니다.
  • 66. 이 예제에서는 다음과 같은 테이블을 사용합니다. ID - primary key값 ArticleNumber - 게시글 번호 중복X Title - 글제목 WriterName - 작성자 WriterID - 작성자ID Content - 글내용 WriteDate - 작성일 ImgName - 사진 파일명 중복X 테이블을 짜실 때에는 기존의 웹기반 게시판에서 보내주는 JSON형태의 데이터를 사용하시면됩니다.
  • 67. 테이블 쿼리를 만드시고 execSQL()로 실행하시면 됩니다. (꼭 저렇게 만드실 필요는 없습니다!!)
  • 68. 이제 JSON형태의 데이터를 SQLite에 넣어봅시다.
  • 69. 하지만 아직 네트워킹을 위한 클래스가 준비되지 않았으므로 테스트용 JSON 문자열을 파싱하여 DB에 넣어보겠습니다.
  • 70. 아래의 주소에서 getJsonTestData()함수를 복사하여 붙여넣어주세요 http://pastebin.com/FPFZAh6L 그냥 String문자열이지만 JSON형식을 띄고 있는 임시 데이터입니다.
  • 71. String형태의 JSON 데이터를 인자로 받아 파싱한 후 바로 DB에 넣어주는 함수를 만들어 봅시다(이름 자유)
  • 72. 우선 코드가 눈에 쉽게 들어오도록 JSON 데이터의 형식에 맞게 필요한 항목을 변수로 만들었습니다.
  • 73. 1 2 3 JSON데이터는 여러개의 데이터를 같이 갖고 있습니다.
  • 74. JSON데이터를 JSONArray에 넣어서 여러 데이터를 하나의 배열로 관리를 합니다.
  • 75. JSONArray의 끝까지 반복하는 것은 length()를 사용한 for문으로 쉽게 사용 가능합니다.
  • 76. getJSONObject(index)를 하면 배열로부터 한 데이터를 가져올 수 있는데 ! JSONObject에 getInt()나 getString()등등을 쓰면 원하는 데이터를 가져 올 수 있습니다.
  • 77. 잘 되고 있는지 확인조차 할 수 없는 먼길을 오시느라 힘드셨죠?? ! DB에 데이터를 넣기전에 JSON을 잘 파싱하는지 ! 확인을 해보겠습니다.
  • 78. 우선 Log.i()를 사용해 데이터가 잘 파싱되고 있는지 확인을 해보겠습니다.
  • 79. 다시 Main Activity로 돌아가 Dao를 생성해줍니다. ! Dao의 생성자로 넣어줬던 Context는 getApplicationContext()로 전달해줍니다.
  • 80. Dao나 다른 클래스로 부터 있던 테스트 JSON데이터를 가져옵니다.
  • 81. 아까 전에 만든 파싱 함수에 테스트 데이터를 넣어줍니다.
  • 82. 이제 제니모션을 실행하고 테스트를 해봅시다!
  • 83. Run As Android Application으로 앱을 실행시키고…
  • 84. 제니모션을 선택해서 앱을 실행시킵니다.
  • 85. 내가 원하는 로그만 골라서 보기 (시간이 여유있을때 보세요!)
  • 86. LogCat으로 데이터를 확인하여는데 데이터가 너무 많아서 확인이 힘듭니다!
  • 87. 필터창이 안보일경우 클릭 로그캣에서 + 버튼을 눌러 필터 설정창을 표시합니다.
  • 88. 로그캣에 는 태그를 정해줄수 있는데 태그정보로 로그를 정리해서 볼 수 있습니다.
  • 89. FilterName을 정해주고 Log Tag에 로그에 썻던 Tag를 넣어주면
  • 90. 내가 사용한 로그만 필터링해서 보여줍니다! ! (Tag명으로 test라고 쓰는건 좋은 습관은 아닙니다.)
  • 91. 로그 종류에 따라 로그의 색이 달라집니다.
  • 92. 이번에야말로 JSON이 잘 파싱되었는지 로그를 볼까요?
  • 93. 로그로 잘 JSON이 파싱된 것을 확인 할 수 있습니다.
  • 94. 이제 잘 파싱된 데이터를 DB에 넣어 봅시다.
  • 95. 다시 Dao클래스로 돌아와 JSON을 파싱해주던 함수로 돌아옵니다.
  • 96. 파싱 부분 아래쪽에 INSERT 쿼리문을 작성해 줍시다. (실수하기 쉬운 곳이므로 주의!) ! 작성 후에는 쿼리문을 execSQL()로 실행시켜줍니다.
  • 97. INSERT문을 사용할 때 Unique값을 중복해서 집어넣으면 오류가 발생할 수 있으므로 try catch로 미연에 방지합니다. (좋은 DB설계는 저런 상황이 발생하지 않도록 잘 설계하는것입니다..)
  • 98. 앱을 실행시키고 DB에 값이 잘 저장이 되어있는지 확인해 봅시다.
  • 99. SQLiteDebugger가 없으면 제니모션에 설치를 해주세요 ! APK파일은 이 주소에서… http://ui.nhnnext.org/crong/scope/android/week3/SQLiteDebugger.apk
  • 100. 기본적으로 DB에 접근하려면 root권한이 필요합니다. ! 아직 권한을 안주셨으면 Allow를 눌러주세요
  • 101. App을 터치하고… 실습 앱을 선택합니다. (자신의 앱 이름 확인)
  • 102. 이 이름과 동일
  • 103. 테이블을 선택하고 SELECT쿼리를 실행시켜보면…
  • 104. 무사히 데이터가 들어간 것을 확인할 수 있습니다.
  • 105. INSERT ? DB에 데이터를 넣는것까지 성공을 했지만…
  • 106. 아직까지 DB의 내용을 가지고 와서 사용하는 방법이 없습니다.
  • 107. 저번 시간에 배운 ArrayAdapter를 사용해 메인 화면에 리스트로 표현해 보겠습니다. Adapter -ArrayList -UI레이아웃
  • 108. 저번수업에 했던 내용 그대로 게시글 데이터를 담을 클래스를 만듭니다.
  • 109. 이름은 Article로 하였습니다.
  • 110. 이제 이 빈클래스에 생성자로 게시글 정보를 받고, get함수들을 만들 예정입니다.
  • 111. Dao에서 사용했던 변수들을 그대로 사용해 주시면 됩니다… ! (반복해서 말씀드리지만 각자의 데이터 형식에 맞게 변경을…)
  • 112. 생성자로 데이터들을 다 입력하였습니다…
  • 113. get 함수들은 좀 쉽게하기 위해 이클립스의 자동 생성 기능을 사용해보겠습니다.
  • 114. Select Getters를 누른후에 OK를 누르면…
  • 115. 이클립스가 잘 만들어 주었습니다^^
  • 116. 다시 Dao로 돌아와 DB의 내용을 반환해주는 함수를 만들어보겠습니다. ! Adapter에서 바로 사용할 수 있도록 ArrayList<Article>형태로 반환을 합니다.
  • 117. DB에서 꺼낼때 잠시 받아둘 임시 변수를 만듭니다. ! (데이터의 형태는 동일 하므로 또 복붙을 하셔도 무방합니다…)
  • 118. ArrayList<Article>를 만들고 반환도 List가 되도록 합니다.
  • 119. 이제 DB에서 데이터를 꺼내봅시다.
  • 120. SELECT 쿼리문을 rawQuery()를 사용하여 Cursor를 만들고 while문을 사용하여 DB를 끝까지 반복하는 명령문을 만들었습니다.
  • 121. Cursor로부터 get함수를 이용해 DB로부터 데이터를 받아와 Article로 감싼 다음 ArrayList에 삽입하고 리턴합니다. (index 0은 id값이므로 1번부터 받아옵니다.)
  • 122. ListView 1 2 3 4 … Gallery ArrayList Adapter -ArrayList -UI레이아웃 1 2 3 4 … GridView 하나의 요소 UI를 구성할 레이아웃 파일 저번 시간에 한 것처럼 Adapter를 만들어 줘야합니다. 1 2 3 4 5 6 7 8 9 Adapter의 개념 제대로 된 안드로이드 앱 개발을 위한 안드로이드 프로그래밍 / 진성주 최종렬 백정현 신중훈 공저
  • 123. 이제 DB데이터를 메인화면의 리스트에 출력을 해보겠습니다.
  • 124. Adapter용으로 사용할 레이아웃은 저번시간 예제와 동일하니 복붙하셔도 무방합니다.
  • 125. 저번 시간에 사용한 CustomAdapter코드를 복사하여 사용하도록 하겠습니다. (Adapter를 만드는 법은 2주차 강의 자료 참고!)
  • 126. 전에 만든 프로젝트의 CustomAdapter.java 파일을 복사해서…
  • 127. NEXTAGRAM 프로젝트에 파일을 붙여넣기 해줍니다…
  • 128. 엄청난 빨간줄들…
  • 129. 우선 package 이름을 수정합니다.
  • 130. 클래스 명도 Professor에서 Article로 바꾸었습니다.
  • 131. profData → articleData TextView tvName → tvTitle TextView tvVillage → tvContent 변수명도 상황에 맞게 바꾸어 줍시다. (eclipse의 Refactor-Rename을 사용하면 편합니다.) 혹 TextView의 ID가 달라졌으면 새 레이아웃에 맞게 ID도 바꾸어 주세요
  • 132. getName() → getTitle() getVillage() → getContent() getImgPath() → getImgName() get 함수명도 Article 클래스에 맞게 바꾸어 줍시다.
  • 133. Assets폴더에 테스트용 사진을 복사합니다.
  • 134. 테스트 사진은 여기에서 다운받아 주세요 ! ui.nhnnext.org/crong/scope/android/week3/photo.zip
  • 135. 다시 MainActivity로 돌아와 Dao로 부터 ArrayList를 받아서 ListView에 Adapter를 적용시킵니다.
  • 136. 다시 한번 테스트를 해보겠습니다.
  • 137. 리스트로 잘 보여지고 있습니다^^
  • 138. 생각해 봅시다. 게시글 내용 부분이 리스트에 다 표시되고 있습니다. ! 만약 게시글의 내용이 길면 어떻게 될까요? ! 그러면 어떻게 하는것이 좋을까요? ! Advanced를 목표로 하는 학생은 이 문제를 해결해주세요! (지옥 관찰중)
  • 139. 이제 글 상세보기 화면을 만들어 보겠습니다. (과제로 만드셨던? Activity입니다.)
  • 140. 레이아웃은 ImageView한개와 TextView4개로 만들었습니다. ! (좋은 레이아웃이 아닙니다! 직접 공들여 만들어보세요!!)
  • 141. 메인에서 리스트를 선택하면 상세보기 페이지로 넘어가도록 이벤트를 만들어 봅니다.
  • 142. OnItemClickListener를 받은 다음 ListView에 setOnItemClickListener()로 리스너를 달아줍니다.
  • 143. OnItemClickListener를 정의하고 ArticleViewer로 이동하는 Intent를 만들어 줍니다. 이때 Article값을 같이 붙여서 보내줍니다.
  • 144. Intent에서 데이터를 다른 Activity로 전달을 할 때 String이 아닌 Article객체를 통채로 넘겨줄수도 있지만 객체를 넘기기위해서는 Parcelable(자바의 Serialization과 유사)을 사용해야 하는데 이 예제에서 다루기에는 복잡하므로 ! ! Advanced를 목표로 하는 분만 Parcelable에 대해 학습을 해봐 주세요^^; http://developer.android.com/reference/android/os/Parcelable.html
  • 145. 이제 게시글을 보여주는 ArticleViewer Activity에서 작업을 합니다.
  • 146. 우선 위젯들을 정의합니다.
  • 147. MainActivity 메인 Activity에서 보낸 게시글 번호를 ArticleViewer에서 받아옵니다.
  • 148. 하지만 가지고 있는것은 게시글 번호 뿐… 게시글 내용을 보여줄 글제목이나 글내용등등 ! Article안의 내용물들이 없습니다…
  • 149. 다시 Dao로 돌아가서 DB로부터 게시글 번호로 검색해서 ! 게시글 내용을 반환해주는 함수를 만들어야합니다.
  • 150. Article을 찾아오는 함수의 내용은 전에만든 내용과 거의 같으므로 기존에 ArrayList를 반환해주던 함수를 복사해서 재사용합니다.
  • 151. 1단계. 중복되는 함수 이름 변경 (ex. getArticleList() → getArticleByArticleNumber() )
  • 152. 2단계. 반환하는 데이터 타입 변경 (데이터가 하나이므로 List가 필요없습니다.) ( ArrayList<Article> → Article )
  • 153. 3단계. 찾을 데이터의 게시글 번호를 인자로 받습니다.
  • 154. 4단계. SQL문을 수정해 게시글 번호로 검색하도록 합니다.
  • 155. 5단계. 데이터는 하나만 검색되므로 while문이 필요없으므로 삭제합니다.
  • 156. ArticleViewer에서 방금 만든 Dao의 함수를 사용하여 Article을 받아옵니다. (인자가 int여서 형변환을 사용하였습니다…)
  • 157. 가져온 Article로부터 데이터를 꺼내서 위젯에 데이터를 삽입합니다.
  • 158. 데이터가 잘 표시되고 있습니다^^ 기기 해상도에 따라 이미지가 너무 크거나 작게 보일 수 있습니다. ! 그림의 픽셀은 일정한데 해상도에 맞게 그림의 크기가 변화되지 못해서입니다. ! 이 문제점도 Advanced를 노리는 분은 Bitmap Resizing을 참고해주세요!
  • 159. (Advanced를 위한) 생각해 봅시다. Dao로부터 ArrayList로 Article들을 가져오는데 리스트는 사진, 글제목, 글내용밖에 없는데 Article의 내용을 다 가져오고 있습니다. 다른 방법은 없을까요? ! 동일한 함수를 반복해서 사용을 하고 있습니다. 한번에 처리 할 방법은 없을까요? ! 등등 더 나은 앱을 만들기 위해서는 어떻게 해야 할까요? 과제가 아닙니다!! 정답은 SW 아키텍쳐시간에…
  • 160. 오늘의 정리
  • 161. 이제 JSON형태의 데이터를 SQLite DB에 넣어보았습니다.
  • 162. DB의 데이터를 Adapter를 사용하여 리스트로 표현하였습니다.
  • 163. 메인화면 리스트를 터치하면 그 게시물의 상세 정보를 볼 수 있습니다. 글 읽기
  • 164. DB에 관한 기본적인 내용은 아마도 끝?
  • 165. 다음에 구현해야 할 내용
  • 166. 네트워크
  • 167. 서버로부터 게시글의 정보를 json 형태로 불러오기
  • 168. 메인화면 글쓰기 기능을 구현 (서버 업로드) 글 읽기
  • 169. 다음주 수업 전까지 ! 기존에 작업하신 웹서버와 연동을 하고 싶으신 분은 JSON방식으로 게시글 정보를 출력해주는 페이지와 ! 사진을 POST방식으로 업로드하면 파일을 저장하고 게시글 정보를 DB에 넣는 부분이 잘 작동하는지 미리 준비를 하시고 오셔야 합니다 : ) (업로드를 위해서는 어떤 인자들이 필요한지 등등) ! ! 그래도 혹시 자신의 서버가 안돌아가도 테스트는 할 수 있도록 서버를 따로 준비해줄 예정을 하고는 있습니다…
  • 170. 수고하셨습니다^^