[Kotlin] 콘텐트 리졸버

Taeyang Lee·2020년 12월 26일
0

Kotlin

목록 보기
9/10

'콘텐트 리졸버'를 이해하기 위해서는 먼저 '콘텐트 프로바이더'가 무엇인지 알아야할 것 같다.

* 콘텐트 프로바이더 (Content Provider)
하나의 앱의 데이터를 다른 앱에서도 사용할 수 있게 제공한다. 다른 앱의 데이터를 제공받아 사용하려면 콘텐트 프로바이더를 구현해야하는 것이 맞지만, 다른 앱 또는 안드로이드 OS에 이미 구현되어 있는 콘텐트 프로바이더로부터 데이터를 제공받아 사용된다.

* 콘텐트 리졸버 (Content Resolver)
콘텐트 프로바이더로부터 데이터를 가져오는 도구가 콘텐트 리졸버이다. 안드로이드에 있는 연락처, 갤러리, 음악 파일과 같은 기본 데이터를 이용하는 용도로 가장 많이 사용한다.

1. 콘텐트 리졸버로 미디어 정보를 읽어오는 과정


1. 데이터 주소 정의

val listUrl = MdiaStore.Audio.Media. EXTERNAL_CONTEN_URL

안드로이드는 미디어 정보를 저장하는 저장소로 MediaStore를 사용한다. MediaStore는 테이블 주소들을 상수로 제공하며 DB에서 테이블명과 같은 역할을 한다.

2. 가져올 컬럼명 정의

val proj = arrayOf(
	MediaStore.Audio.Media._ID,
    	MediaStore.Audio.Media.TITLE
)

미디어 정보의 상세 데이터 중 원하는 데이터만 선택해서 읽어올 수 있다. 테이블 주소와 마찬가지로 컬럼명도 상수로 제공한다. 가져올 컬럼명은 배열에 저장해 사용한다.

3. 데이터 클래스 정의

data class Music (val id: String, val title: String)

꼭 데이터 클래스를 사용해야 되는 것은 아니지만, 클래스를 미리 만들어두면 읽어온 미디어 정보를 다루기가 쉽다.


4. 쿼리 실행

val cursor = contentResolver.query(listUrl, proj, null, null, null)

콘텐트 리졸버가 제공하는 query( ) 메서드에 1~3 단계에서 정의한 주소와 컬럼명을 담아서 호출하면 쿼리를 실행한 결과를 커서(Cursor)라는 형태로 반환한다. 세 번째, 네 번째, 다섯 번째 파라미터는 쿼리에 조건을 설정하는 옵션용이다. null을 입력하면 전체 데이터를 읽어온다.

  • 커서(Cursor) : 데이터셋을 처리할 때 현재 위치를 포함하는 데이터 요소

5. 데이터 클래스 정의

val nusicList = nutableListOf<Music>()
while (cursor.moveToNext()) {
	var index = cursor.getColumnIndex(proj[0])
    	val id = cursor.getStirng(index)
    
    	index = cursor.getColumIndex(proj[1])
        val title = cursor.getStirng(index)
        val music = Music(id, title)
        musicList.add(music)

전달받은 커서 객체를 반복문으로 반복하며 레코드(컬럼으로 구성된 데이터 한 줄)를 한 줄씩 읽어 데이터 클래스에 저장한다.



(☞゚ヮ゚)☞ [참고서적] 이것이 안드로이드다 with 코틀린 / 고돈호 / 한빛미디어
profile
Tyangpedia

0개의 댓글