[TIL]Android ContentProvider

mandoofu·2024년 10월 30일

안드로이드

목록 보기
20/20
post-thumbnail

ContentProvider

  • 위치(Uri) 및 타입(type)와 함께 공유 자료에 대한 추가, 삭제, 갱신 및 자료에 대한 결과 집합 등을 ContentProvider를 상속받아 재정의 함으로써 제공

  • Custom ContentProvider은 SQLite3(Room)와 매핑을 이룸

    • DB를 사용시엔 반드시 테이블 마다 PK(“_id”)가 존재 해야 함
    • _id INTEGER PRIMARY KEY AUTOINCREMENT
  • 런타임 환경에서 데이터를 관리하고 다른 앱에 데이터를 전달하는 역할.

  • CP는 REST 방식과 비슷

  • ContentResolver , Jetpack AndroidX CursorLoader(비동기처리) 를 이용하여 클라이언트에서 호출

  • 내용제공자는 데이터를 제공하는 저장소를 한곳으로 통일시키고 클라이언트들이 쉽게 접근 할 수 있도록 만들어 주는 데이터 레이어

ex) 다섯개의 추상 메소드를 재정의

class CustomContentProvider : ContentProvider(){
	fun delete(Uri, String, String []) : Int{
		return 0 ;
	}
	fun getType(Uri) : String{
		return “”;
	}
	fun insert(Uri, ContentValues) : Uri{
		return null;
	}
	fun onCreate() : Boolean{
		return false;
	}
	fun query(Uri , String [], String, String [], String) : Cursor{
		return null;
	}
	fun update(Uri, ContentValues, String, String []) : Int{
		return 0;
	}
}

ContentProvider Methods

  • onCreate()

    • Custom CP를 초기화하는 작업이 필요하다면 구현
    • CP를 시작 할 때 자동 호출되는 Callback Method
    • 여러 Thread에 의해 호출 될 수 있으므로 Thread Safe 하게 구현하여야 함
  • CUD(insert, update, delete) Methods

    • insert는 PK 값을 Uri 객체로 리턴
    • update, delete 는 id 및 수행된 행의 개수를 리턴
  • getType()

    • URI 인수가 반환하는 데이터 유형을 설명하는 String(MIME 형식)을 반환
    • URI 패턴이 하나의 행에 대한 것일 경우
      • vnd.android.cursor.item/vnd.com.example.provider.table1
    • URI 패턴이 하나 이상의 행에 대한 것일 경우
      • vnd.android.cursor.dir/vnd.com.example.provider.table1

ContentProvider URI정의

  • 인터넷에서 위치를 나타내는 URL보다는 상위의 개념

    • content://authority/path0/path1/id 의 형태로 정의 가능
  • Uri를 이용하여 내용제공자의 추상화된 이름을 다른 앱에 제공

  • 내용 제공자 애플리케이션은 다른 앱이 접근하는데 사용할 기준이 되는 URI를 중복 없이 정의

    • Uri Scheme : Content Provider는 반드시 “content://” 스킴을 사용
  • Path : Uri 선언은 하나 또는 복수개의 ITEM을 선언하는 형태로 정의함

  • 단수 형태 : 보통 Authority 다음에 ID값이 설정 됨

// 12는 보통 ID값을 나타냄
content://com.te.st.er.crmdb/person/12
  • 복수 형태
//개인고객 전체를 나타냄
content://com.te.st.er.crmdb/person
  • “#”,”*”
content://com.te.ster.crmdb/person/# : 특정 수치
content://com.te.ster.crmdb/ebiz/person/# : 개발자가 정하기 나름
content://com.te.ster.crmdb/ebiz/* : 모든 형식
  • Projection Map
    • RDB CP는 DB의 열 집합과 실제 열 집합 간의 중재인 역할을 함
    • 보통 물리적 테이블, 컬럼 이름과 보통 다른 이름을 매핑(Projection Map)하여 사용
    • SQLiteQueryBuilder을 이용해 해당 프로젝션 맵을 등록 함
      • setProjectionMap(Map)

0개의 댓글