コンテンツプロバイダおよびコンテンツ解析者の実現手順

6738 ワード

一、クラスを作成し、ContentProviderを継承し、onCreate,query,insert,update,delete,getTypeメソッド二、リストファイルにproviderノードを宣言する
<provider
    android:authorities="cn.test.provider"            android:name="cn.test.contactproviderdemo.MyProvider"
    android:exported="true">
provider>

ここで注意しなければならないのは、android:authoritiesという文字列はブロックに相当し、対応するURIマッチング上で対応するデータにアクセスする必要があることです.また、Android 4.4以上のバージョンでは、android:exported="true"3を構成し、UriMatcherで対応するURIマッチングルールを追加する必要があります
private static final UriMatcher sURIMatcher  = new UriMatcher(UriMatcher.NO_MATCH);

    //        ,  -1,       
    private static final int QUERY_SUCCESS = 1;
    private static final int INSERT_MATCHED = 2;
    private static final int UPDATE_MATCHED = 3;
    private static final int DELETE_MATCHED = 4;

    static {
        //     URI           
        sURIMatcher.addURI("cn.test.provider", "query", QUERY_SUCCESS);
        sURIMatcher.addURI("cn.test.provider", "insert", INSERT_MATCHED);
        sURIMatcher.addURI("cn.test.provider", "update", UPDATE_MATCHED);
        sURIMatcher.addURI("cn.test.provider", "delete", DELETE_MATCHED);
    }

具体的にデータベースの添削を調べると、ここではコードを貼らずに出てきます.次に、他のアプリケーションがこのアプリケーションのデータベースにアクセスします.四、新しいプロジェクトの下で、コンテンツ解析者を使用してデータサンプルコードを取得する.
public void query(View v) {
        //        
        ContentResolver resolver = getContentResolver();
        Uri uri = Uri.parse("content://cn.test.provider/query");
        Cursor cursor = resolver.query(uri, null, null, null, null);
        while (cursor.moveToNext()) {
            String name = cursor.getString(cursor.getColumnIndex("name"));
            System.out.println("name=" + name);
        }
    }

    public void insert(View v) {
        ContentResolver resolver = getContentResolver();
        Uri uri = Uri.parse("content://cn.test.provider/insert");
        ContentValues values = new ContentValues();
        values.put("name", "   ");
        values.put("phone", "489756848");
        values.put("age", 12);
        Uri insert = resolver.insert(uri, values);
        System.out.println(insert);
    }

    public void delete(View v) {
        ContentResolver resolver = getContentResolver();
        Uri uri = Uri.parse("content://cn.test.provider/delete");
        String where = "name = ?";
        String [] selectionArgs = {"  "};
        int delete = resolver.delete(uri, where, selectionArgs);
        Toast.makeText(getApplicationContext(), "   " + delete + "   ", Toast.LENGTH_SHORT).show();
    }

    public void update(View v) {
        ContentResolver resolver = getContentResolver();
        Uri uri = Uri.parse("content://cn.test.provider/update");
        ContentValues values = new ContentValues();
        values.put("name", "   ");
        String where = "name = ?";
        String [] selectionArgs = {"  "};
        int update = resolver.update(uri, values, where, selectionArgs);
        Toast.makeText(getApplicationContext(), "   " + update + "   ", Toast.LENGTH_SHORT).show();
    }

ここでもう一つ説明しなければならないのは、Uriリソースのアクセスにはcontent://、またcnを追加しなければならないことです.test.providerは、別のプロジェクト再構成表ファイルのandroid:authoritiesフィールドで宣言された文字列に対応し、後に続く文字、例えばquery、insert、deleteなどは、別のプロジェクトでstatic静的コードブロックでUriMatcherオブジェクトaddから入力されたマッチングルールであり、対応する場合には対応する方法が実行される.