MakeBook
책 만들기 어플리케이션
명명규칙
JAVA파일
- Activity 파일은 끝에 Activity 붙여주기
xml layout
- layout안에 폴더를 만들 수가 없어서 이름을 잘 정해주셔야 합니다!
- 사용될 패키지명 _ 액티비티명 _ (기능/용도) 으로 해주시면 좋을거 같습니다!
Gradle
- dependecny 추가시 주석으로 무슨 용도인지는 적어주세요!
책 만들기 어플리케이션
아래와 같은 사항을 구현하였습니다.
기존 DB에서 Page의 column을 수정하였으므로, 테스트하실 때 DB를 초기화하셔야 할 수도 있습니다.
이제 앞으로 그림을 추가하는 기능을 구현하고, JSON을 DB에 저장하는 기능을 구현하려고 합니다.
기본 화면 페이지 리스트 수정
DB 스키마 컬럼추가, 컬럼명 변경
책 클릭시 Dialog 떠서 (표지, 수정, 삭제, 읽기) 가능
표지로 가면 표지 바꾸기
맨 위에 생성을 통해 생성 가능
표지 수정 화면에서 저장 -> 수정 과정은 그대로 종료, 생성 과정이었으면 EditPageActivity로 표지 수정 화면에서 기본 표지 -> 수정 과정은 그대로 기본표지 변경 후 종료, 생성 과정이었으면 EditPageActivity로
가장 아래의 commit만 보시면 됩니다!
edit과 read page가 toolbar와 메뉴 기능만 다르고 모든 것이 동일합니다. 따라서
위의 그림을 예제로 보면 BOOKID 1에서의 Page의 순서는 nextPage를 쭉 따라가면 됩니다. 첫 페이지는 ISHEAD가 1인 페이지이며, 실제 화면에는 표시되지 않습니다. 예를 들어, 위의 예제에서 BOOKID가 1이면서 ISHEAD가 1인 1번째 row가 head입니다. NEXTPAGE는 7이므로 ID가 7인 다음 Page를 찾습니다. ID 7인 Page의 NEXTPAGE는 2입니다. 이런 식으로 따라가면 7=>2=>8=>5=>6=>4=>3=>0 으로 가게 됩니다. ID가 0인 Page는 존재하지 않으므로 마지막 페이지임을 의미합니다.
이제 selection과 selectionArgs를 넘겨 다양한 조건에서 select 할 수 있습니다.
Todo : 매번 DB에 넣고 받아와서 연결리스트를 따라가는 식으로 자료구조를 갱신하다보니 시간이 오래 걸립니다. 개선 방식을 생각해볼게요 :)
대체 flipper의 동작 원리를 이해할 수 없어서 일단 올립니다 ㅠㅠ (추가, 삭제 기능의 index가 온전치 않으니 감안해주세요!)
Common 패키지에 DatabaseHelper, Constant, BookDB 만들었습니다.
Constant는 DB 테이블명, 쿼리문을 따로 저장해 둔 곳입니다.
제가 사용한 방식은 간단하게 SQLiteOpenHelper를 상속받은 클래스 (DatabaseHelper)를 상황에 맞게 재정의하여 초기 세팅을 하고, SQLiteDatabse 객체에 연결해서 메소드를 실행시키는 방식으로 했습니다.
그냥 간단하게 확인하시려면 BookDB 클래스에 CRUD 예시를 넣어 놨으니 확인하시면 됩니다.
Gradle 파일에 라이브러리 추가해서 권한 요청하도록 했습니다. 일단은 디바이스 내부 r/w만 했는데 Android Manifest.xml에 원하시는 권한을 검색하셔서 추가하시면 됩니다.
아직은 구현이 완벽하지 않아서 한번 권한을 취소한 경우 아예 앱을 삭제했다가 다시 깔아야지 물어봅니다. (그냥 build로는 안됨) 권한에 대한 질의는 MainActivity에 있습니다.