상세 컨텐츠

본문 제목

(안드로이드) 콘텐트 프로바이더 UriMatcher클래스란? (ContentProvider UriMatcher클래스란?)

Android

by choiDev 2019. 1. 29. 11:21

본문

콘텐트 프로바이더 UriMatcher클래스란? (ContentProvider UriMatcher클래스란?)


[안드로이드 API 문서 설명]

콘텐트 프로바이더의 URI를 매칭시키는 유틸리티 클래스 


[각종 문서 설명]

UriMatcher는 ContentResolver가 전달한 Uri를 분석하여 어떤 요청을 하는지 쉽게 분석해 주는 클래스이다. UriMatcher에 프로바이더가 지원하는 요청 Uri를 등록하는 데 addURI()를 사용한다.


[필자가 이해한 UriMatcher 설명]

1. UriMatcher는 콘텐트 프로바이더가 전송받을 Uri형식 들을 미리 정의 

2. (전송 받은 Uri == 전송받을 Uri 형식)들과 비교 후

3. 일치하면 해당하는 쿼리문을 실행,

4. 일치하지 않는다면 null값을 반환하는 일을 도와주는 클래스


아래에서 간단한 UriMatcher예제를 보시겠습니다.

[UriMatcher 예제]

private static final String AUTHORITY = "com.provider";
private static final int STUDENT_ALL = 1;
private static final int STUDENT_ONE = 2;

private static UriMatcher STUDENT_URI_MATCHER = null;
static {
STUDENT_URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);

//ex) content://com.provider/students
STUDENT_URI_MATCHER.addURI(AUTHORITY,"stduents",STUDENT_ALL);
//ex) content://com.provider/students/1
STUDENT_URI_MATCHER.addURI(AUTHORITY,"stduents/#",STUDENT_ONE);
}

1. ContentResolver 앱에서 특정 레코드의 갱신을 위해 update() 호출, 여기서 프로바이더 주소와 갱신할 레코드 id를 Uri정보로 표현하여

   전달한다.

2. 프로바이더의 update 함수가 호출되고, 해당 함수의 인자로 Uri 정보를 전달받는다.

3. 전달 받은 Uri를 UriMatcher로 전달

4. UriMatcher에서는 등록된 URI에서 전달받은 Uri와 매칭되는 것을 찾는다.

5. UriMatcher는 일치하는 요청 코드 STUDENT_ONE 상수를 반환한다.

6. update 함수는 STUDENT_ONE 요청 코드를 보고 해당하는 적절한 동작을 수행한다.



이렇게 1~6번까지 동작 순서를 보셨는데 이해가 잘 되지 않으신다면, 아래의 UriMatcher를 사용하여 Uri를 찾는 예제를 같이 보시죠


[일치하는 Uri를 찾는 예제]

@Override
public Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {
switch(STUDENT_URI_MATCHER.match(uri)){
case STUDENT_ONE:
selection = "_id=" + ContentUris.parseId(uri);
selectionArgs = null;
break;
case STUDENT_ALL:
break;
case UriMatcher.NO_MATCH:
return null;
}
return dbManager.query(projection,selection,selectionArgs,null, null,sortOrder);
}


네 이번 글은 여기서 끝입니다. 콘텐트 프로바이더를 하시면서 많은 도움이 되셨길 바라며 오늘도 좋은 하루 되세요~ 지금까지 초이였습니다~!!!

관련글 더보기