public class MyList extends ListActivity {
...
Uri uri = ContentUris.withAppendedId(MgContentProvider.CONTENT_URI, id);
Cursor cursor = getContentResolver().query(uri, PROJECTION, null, null, null);
cursor.moveToFirst(); //(참고: id로 row를 하나만가져와서 이부분이 생략된다면 가져온 row에 접근이 안됨)
cursor.getString(cursor.getColumnIndex("name"));
...
}
어플리케이션안에서 sqlite3를 사용해서 database를 사용하였다면, 위같은 방법으로 database의 row를 선택해서 접근할 수 있다.
위 코드에서 컨텐트프로바이더는 database와 table을 만드는 기능과 query를 사용해서 select와 같이 검색기능을 해주는데, query문을 작성해 전송하면 해당 row가 cursor형태로 리턴되어 반환한다.
확장 개념을 다시 설명해보면, 아래 예제의 컨텐트 프로바이더의 URI를
content://com.ABCpkg.provider.ABC/ABCs
로 설정을 했다. 위의 activity에서 컨텐트 프로바이더의 URI를 호출하는데 뒤에 id값을 더 붙여서
content://com.ABCpkg.provider.ABC/ABCs/id
로 확장을 한다. 이렇게 되면 뒤에 붙은 id값이 row를 선택하여 전체 row가 아닌 하나의 row만 선택이 되는 것이다.
(참고:아래 코드에서 UriMatcher는 컨텐트프로바이더로 들어온 uri가 유효한지 패턴을 확인하기 위해 사용되는 부분이다.)
public class MgContentProvider extends ContentProvider {
...
public static final Uri CONTENT_URI = Uri.parse("content://com.ABCpkg.provider.ABC/ABCs");
private static final UriMatcher mUriMatcher;
static {
mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
mUriMatcher.addURI("com.ABCpkg.provider.ABC", "ABCs", ROWS); //전체 row
mUriMatcher.addURI("com.ABCpkg.provider.ABC", "ABCs/#", ROW_ID); //선택(#)된 한개 row
}
...
}