Android 학습 노트-ContentProvider 사용 방법
17147 단어 android
1. 타인의 ContentProvider 방문
타인의 Content Provider에 접근하려면 Content Resolver 클래스를 빌려서 Content Resolver에 대한 조작이 SQLite와 매우 비슷해야 한다.다른 점은 ContentResolver에서 데이터를 조작하려면 uri가 필요합니다.uri는 주로 두 부분의 authority와 path를 포함하는데 authority는 일반적으로 응용 프로그램의 패키지 이름이고 path는 같은 응용 프로그램의 다른 표를 구분한다.그 외에 문자열 헤더에 프로토콜 이름을 붙여야 합니다.ContentValues는 Uri 외에도 액세스 컨텐트 제공에 필요할 수 있습니다.
Uri uri=Uri.parse("content://com.example.app.provider/table1");
ContentValues values=new ContentValues();
values.put("column1","text");
values.put("column2",1);
getContentResolver().insert(uri,values);
private void readContacts(){
Cursor cursor=null;
try{
// , where , where , 。
cursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,null,null,null);
if(cursor!=null){
while(cursor.moveToNext()){
String displayName=cursor.getString(cursor.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String number=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
}
}catch (Exception e){
e.printStackTrace();
}finally {
if(cursor!=null){
cursor.close();
}
}
}
2. 콘텐츠 공급자 만들기
콘텐츠 공급자를 만들려면Content Provider를 계승하고 그 몇 가지 방법인 onCreate (),query (),insert (),update (),delete (),getType () 를 다시 써야 합니다.기본 사고방식은 스스로 UriMatcher를 만들고 이 UriMatcher를 사용하여 전송 방법의 ui를 일치시킨 다음에 일치 결과에 따라 데이터베이스를 조작하는 것이다.
static {
uriMatcher=new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(AUTHORITY_ITEM,"book",BOOK_DIR);
uriMatcher.addURI(AUTHORITY_ITEM,"book/#",BOOK_ITEM);
uriMatcher.addURI(AUTHORITY_ITEM,"category",CATEGORY_DIR);
uriMatcher.addURI(AUTHORITY_ITEM,"category/#",CATEGORY_ITEM);
}
public boolean onCreate() {
dbHelper=new MyDatabaseHelper(getContext(),"BookStore.db",null,2);
return true;
}
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteDatabase db=dbHelper.getReadableDatabase();
Cursor cursor=null;
switch (uriMatcher.match(uri)){
case BOOK_DIR:
// query contentprovider
cursor=db.query("Book",projection,selection,selectionArgs,null,null,sortOrder);
break;
case BOOK_ITEM:
// uri
String bookId=uri.getPathSegments().get(1);
cursor=db.query("Book",projection,"id=?",new String[]{bookId},null,null,sortOrder);
break;
case CATEGORY_DIR:
// query contentprovider
cursor=db.query("Category",projection,selection,selectionArgs,null,null,sortOrder);
break;
case CATEGORY_ITEM:
// uri
String categoryId=uri.getPathSegments().get(1);
cursor=db.query("Category",projection,"id=?",new String[]{categoryId},null,null,sortOrder);
break;
default:
break;
}
return cursor;
}
2.2 URI 일치content://com.example.app.provider/table1이 URI는 테이블에 액세스하려는 모든 데이터를 나타냅니다.content://com.example.app.provider/table1/1테이블에 액세스하려는 ID의 데이터 URI에 대한 일치를 나타냅니다. *: 임의의 길이와 일치할 수 있는 임의의 문자 #: 임의의 길이와 일치할 수 있는 숫자를 나타냅니다.2.3 URI에 해당하는 MIME 문자 a. 는 vnd여야 합니다.시작 b. 경로로 끝나면android를 받습니다.cursor.dir/, id로 끝나면android.cursor.item/. c. vnd.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.