데이터 저장과 사용
데이터 저장 유형
대용량 및 일반 데이터
설정 상태 데이터
빈번히 변경되는 데이터 파일
Preference
SQLite 데이터베이스
영속성 있는 데이터들
파일 위치에 따라서
리눅스 기반 파일
App 범위
SD 카드 속 파일
파일 시스템
접근에 대한 보안 레벨이 다릅니다.
시스템 파일 접근
• 안드로이드 파일 시스템은 Linux 시스템.
사용되는 라이브러리는 java 라이브러리.
• App 마다 접근 가능 공간 한정
– 위치: /data/data/패키지명/files 하단
– 해당 위치 하단 no – depth. 이름으로만 구분
• 접근자는 Context 수준에서 제공
– public abstract FileInputStream openFileInput (String name)
• Name에 “/”가 포함되면 에러 처리.
– public abstract FileOutputStream openFileOutput (String name,
int mode)
• Mode는 접근도에 따라서
MODE_APPEND, MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE
일반적인 파일 처리 과정
App에서 사용되는 파일들로서
Package에 포함 배포되는
res 폴더 하단 raw 폴더 안에
있는 파일에 대한 처리
다른 App에서 접근
• 다른 앱에서 접근을 허용하게 하기 위해서는 권한 정의.
• 다른 앱에서 접근하기 위해서는 파일 소유 Context를 경
유해서 들어와야 합니다.
– Context otherContext = createPackageContext(“exam.andexam”,
Context.CONTEXT_IGNORE_SECURITY);
FileInputStream fis =otherContext.openFileInput(“test.txt”);
SD 카드 속 파일 접근
• SD 카드는 공용 저장소.
• 안드로이드는 SD 카드에 대해서
보안 관리 하지 않음.
• Java에서 일반 파일 다루듯.
• 주의할 점은 경로를 hard
coding이 아닌 아래 방법 통해
서 취할 것.
– Environment.getExternalStorageDirectory()
Preference 사용하기
• App이 설치되어서 삭제되기 전까지 꾸준히 관리되어야
할 데이터들을 위한 기능
• Preference를 통해 관리되는 정보는 xml 파일 형태로 저
장
– 입력/출력 형태는 Map (key/value) 형태.
– 파일이라 동시성 고려.
Transaction 처리 = commit, editor
기본값.
꼬옥 활용!
조직화된 데이터 = SQLite
• SQLite = 내장형 소규모 데이터베이스
– 안드로이드 내에 내장해서 제공.
• SQLiteOpenHelper = DB를 생성/오픈 담당
– abstract class
– SQLiteOpenHelper를 상속해서
onCreate, onUpgrade, onOpen을 구현.
– getReadableDatabase, getWritableDatabase 호출 될 때
적절히 DB 생성 / 초기화 / 갱신을 맡아서 수행
• 위 두 함수는 return에 시간이 소요된다. 그렇기 때문에, 가능한
Main Thread에서 호출은 피하도록 한다.
DBHelper : SQLite DB 초기화
참고: 관련 SQL들
onCreate: 처음 수행/초기화
onUpdate: 업데이트 발생 시 초기화
1. dbVersrion 값을 변경.
2. 수행 시에 onUpgrade 수행
DB와 Cursor
• Sqlite에 select query를 하는 경우에 Cursor를 반환. 그리고 사용하
고 난 뒤에는 cursor도 db도 close를 해야 합니다.
• 일반적인 경우에는 close에 문제가 되지 않습니다. 그러나 쿼리를 하
고 지속적으로 화면에서 쓰이는 Cursor는 정리 시점이 모호합니다.
• 예) 댓글 목록을 리스트로 보여주는 경우, 리스트를 아예 닫지 않는
이상 cursor는 지속 사용이 되고, db도 open되어 있어야 합니다.
• 이를 프로그램적으로 제어하기 힘들어서 제공되는 것이 바로
managedQuery입니다.
– 안드로이드 3.0 (허니컴) 부터는 CursorLoader를 권장.
– 액티비티가 해제될 때 Cursor 객체의 리소스도 자동 해제됩니다.

16 데이터 저장과 사용

  • 1.
  • 2.
    데이터 저장 유형 대용량및 일반 데이터 설정 상태 데이터 빈번히 변경되는 데이터 파일 Preference SQLite 데이터베이스 영속성 있는 데이터들
  • 3.
    파일 위치에 따라서 리눅스기반 파일 App 범위 SD 카드 속 파일 파일 시스템 접근에 대한 보안 레벨이 다릅니다.
  • 4.
    시스템 파일 접근 •안드로이드 파일 시스템은 Linux 시스템. 사용되는 라이브러리는 java 라이브러리. • App 마다 접근 가능 공간 한정 – 위치: /data/data/패키지명/files 하단 – 해당 위치 하단 no – depth. 이름으로만 구분 • 접근자는 Context 수준에서 제공 – public abstract FileInputStream openFileInput (String name) • Name에 “/”가 포함되면 에러 처리. – public abstract FileOutputStream openFileOutput (String name, int mode) • Mode는 접근도에 따라서 MODE_APPEND, MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE
  • 5.
    일반적인 파일 처리과정 App에서 사용되는 파일들로서 Package에 포함 배포되는 res 폴더 하단 raw 폴더 안에 있는 파일에 대한 처리
  • 6.
    다른 App에서 접근 •다른 앱에서 접근을 허용하게 하기 위해서는 권한 정의. • 다른 앱에서 접근하기 위해서는 파일 소유 Context를 경 유해서 들어와야 합니다. – Context otherContext = createPackageContext(“exam.andexam”, Context.CONTEXT_IGNORE_SECURITY); FileInputStream fis =otherContext.openFileInput(“test.txt”);
  • 7.
    SD 카드 속파일 접근 • SD 카드는 공용 저장소. • 안드로이드는 SD 카드에 대해서 보안 관리 하지 않음. • Java에서 일반 파일 다루듯. • 주의할 점은 경로를 hard coding이 아닌 아래 방법 통해 서 취할 것. – Environment.getExternalStorageDirectory()
  • 8.
    Preference 사용하기 • App이설치되어서 삭제되기 전까지 꾸준히 관리되어야 할 데이터들을 위한 기능 • Preference를 통해 관리되는 정보는 xml 파일 형태로 저 장 – 입력/출력 형태는 Map (key/value) 형태. – 파일이라 동시성 고려. Transaction 처리 = commit, editor 기본값. 꼬옥 활용!
  • 9.
    조직화된 데이터 =SQLite • SQLite = 내장형 소규모 데이터베이스 – 안드로이드 내에 내장해서 제공. • SQLiteOpenHelper = DB를 생성/오픈 담당 – abstract class – SQLiteOpenHelper를 상속해서 onCreate, onUpgrade, onOpen을 구현. – getReadableDatabase, getWritableDatabase 호출 될 때 적절히 DB 생성 / 초기화 / 갱신을 맡아서 수행 • 위 두 함수는 return에 시간이 소요된다. 그렇기 때문에, 가능한 Main Thread에서 호출은 피하도록 한다.
  • 10.
    DBHelper : SQLiteDB 초기화
  • 11.
  • 12.
  • 13.
    onUpdate: 업데이트 발생시 초기화 1. dbVersrion 값을 변경. 2. 수행 시에 onUpgrade 수행
  • 15.
    DB와 Cursor • Sqlite에select query를 하는 경우에 Cursor를 반환. 그리고 사용하 고 난 뒤에는 cursor도 db도 close를 해야 합니다. • 일반적인 경우에는 close에 문제가 되지 않습니다. 그러나 쿼리를 하 고 지속적으로 화면에서 쓰이는 Cursor는 정리 시점이 모호합니다. • 예) 댓글 목록을 리스트로 보여주는 경우, 리스트를 아예 닫지 않는 이상 cursor는 지속 사용이 되고, db도 open되어 있어야 합니다. • 이를 프로그램적으로 제어하기 힘들어서 제공되는 것이 바로 managedQuery입니다. – 안드로이드 3.0 (허니컴) 부터는 CursorLoader를 권장. – 액티비티가 해제될 때 Cursor 객체의 리소스도 자동 해제됩니다.