詳細のContentProvider


ContentProviderのコンテンツプロバイダは、統一されたインタフェースを提供するために、異なるアプリケーション間でデータを共有するために、我々はAndroidアプリケーションが外部から隔離されているシステム内のデータは、他のアプリケーションが(連絡先など)、独自のデータを使用することができます取得することを知っているこの時間私たちは、のContentProviderを使用しています。

ディレクトリ

- CRUD

- ContentObserver

CRUD

他のContentProvider ContentResolverのクエリによって共有データのメソッドを実装し、URIを介してアクセスするアプリケーションを識別するためのデータ,.(CRUD)操作、更新、挿入、削除します。あなたはまた、我々は導入する必要があり、その後、データは、対応するリフレッシュにページを変更したかどうかを監視するためにContentObserverで登録することができます

OnCreate関数のContentProviderを作成するときに使用

クエリ指定されたURIのデータのクエリは、カーソルを返します。

挿入のContentProviderで指定されたURIにデータを追加するための

削除指定されたURIデータを削除します

更新指定されたURIを更新するために、ユーザデータを

getType指定されたMIMEタイプのデータを返すためのウリ

アクセスするURIデータによって自分自身の位置を特定するContentResolverの、URI形式:[スキーム:] [//ホスト:ポート] [パス] [?クエリ]

例えばCRUDのコードは次の通りであります:


ContentResolver resolver = getContentResolver();
Uri uri = Uri.parse("content://com.madreain.provider.myprovider/tablename");

//添加一条记录
ContentValues values = new ContentValues();
values.put("name", "madreain");
values.put("age", 26);
resolver.insert(uri, values);

//获取tablename表中所有记录
Cursor cursor = resolver.query(uri, null, null, null, "tablename data");
while(cursor.moveToNext()){
   Log.i("ContentTest", "tablename_id="+ cursor.getInt(0)+ ", name="+ cursor.getString(1));
}

//把id为1的记录的name字段值更改新为zhang1
ContentValues updateValues = new ContentValues();
updateValues.put("name", "zhang1");
Uri updateIdUri = ContentUris.withAppendedId(uri, 2);
resolver.update(updateIdUri, updateValues, null, null);

//删除id为2的记录,即字段age
Uri deleteIdUri = ContentUris.withAppendedId(uri, 2);
resolver.delete(deleteIdUri, null, null);

复制代码

AndroidManifest.xmlをに登録する必要がcom.madreain.provider.myprovider

<provider android:name="MyProvider" 
          android:authorities="com.madreain.provider.myprovider" 
          android:enabled="true"
          android:exported="true"/>
复制代码

ContentObserver

ContentProvider、ContentResolverの、ContentObserverとの関係について教えてください:ContentProvider--コンテンツプロバイダを、アンドロイドの役割で共有データの外にある、あなたがのContentProviderを介してアクセスし、他のアプリケーション、他のアプリケーションへのデータアプリケーションを共有できることを意味することができますティム切除はContentProviderのことで、アプリケーション内のデータを確認するために行きました。ContentResolver--コンテンツ分析は、その役割は一定のルール(コンテンツプロバイダインタフェース定義から実際の呼び出しでそのデータを操作すること)に応じて、コンテンツのデータへのアクセスを提供することです。ContentObserver--コンテンツビューアは、(キャプチャ)データベースの変化を観察した特定のURIを起こし、その後、同様のデータベース技術・トリガー(トリガー)で何らかの処理、ウリContentObserver観測された変化を行うには、それをトリガーします。

ウリ特定のデータベースに起因する変化を観察した後、ときに観察ContentObserverウリの変更いくつかの処理を行うためのコンテンツビューア、それはのonChangeコールバックメソッドをトリガーします

継承ContentObserver、達成するのonChangeメソッド

public class MObserver extends ContentObserver{
        public MObserver(Handler handler){
            super(handler);
        }


        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            queryDb();
        }
    }
复制代码

AActivityでの登録と登録解除

//注册
MObserver mContentObserver = new MObserver(new Handler(),this);
getContentResolver().registerContentObserver(Madreain.CONTENT_URI_DELETE,true, mContentObserver);

//注销
getContentResolver().unregisterContentObserver(mContentObserver);

复制代码

ます。https://juejin.im/post/5cee742be51d45108f254191で再現

おすすめ

転載: blog.csdn.net/weixin_34000916/article/details/91450310