Android 학습 노트-ContentProvider 사용 방법

17147 단어 android
이 문서는 ContentProvider를 기록하는 두 가지 용도로 사용되는데, 그것이 바로 다른 사람이 제공하는 ContentProvider에 접근하고, 자신이 자신만의 ContentProvider를 만드는 것이다.
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..< path >. 예를 들어 "vnd.android.cursor.item/vnd.com.example.app.provider.table1"

좋은 웹페이지 즐겨찾기