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
   }

 

   ...

}