他のプログラムのデータにアクセスします。
コンテンツプロバイダーには、一般的に2つの用途があります。
1.既存のコンテンツプロバイダーを使用して、対応するプログラムのデータを読み取り、操作します。
2.2。独自のコンテンツプロバイダーを作成して、プログラムのデータへの外部アクセスを提供します。
ContentResolverの基本的な使用法
コンテンツプロバイダーで共有されているデータにアクセスするには:ContentResolverクラスを使用する必要があります。
このクラスのインスタンスは、ContextのgetContentResolver()メソッドを介して取得できます。
ContentResolverは、データに対するCRUD操作のための一連のメソッドを提供します。
public Uri insert(Uri uri, ContentValues values)
//该方法用于往ContentProvider添加数据。
public int delete(Uri uri, String selection, String[] selectionArgs)
//该方法用于从ContentProvider删除数据。
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
//该方法用于更新ContentProvider中的数据。
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
//该方法用于从ContentProvider中获取数据。
ContentResolverの追加、削除、変更、およびクエリのメソッドがテーブル名パラメーターを受け取らず、代わりにコンテンツURIと呼ばれるUriパラメーターを使用していることが判明する場合があります。コンテンツURIは、コンテンツプロバイダー内のデータの一意の識別子を確立し、主に次の2つの部分で構成されます。
1:権限:異なるアプリケーションを区別するために使用されます。通常、競合を回避するために、名前付けにはパッケージ名が使用されます。
2:パス:同じアプリケーション内の異なるテーブルを区別するために使用され、通常は権限の後ろに追加されます。
3:最後に、文字列の先頭にプロトコルステートメントを追加する必要もあります。
例えば:
content://com.example.app.provider/table1
content://com.example.app.provider/table2
コンテンツURI文字列を取得した後、パラメーターとして渡す前に、それをUriオブジェクトに解析する必要もあります。コードは次のように表示されます。
Uri uri = Uri.parse("content://com.example.app.provider/table1");
Uri.parse()メソッドを呼び出すだけで、コンテンツURI文字列をUriオブジェクトに解析できます。
table1テーブルのデータをクエリします
Cursor cursor = getContentResolver().query(
uri,//指定查询某个应用程序下的某一张表
projection,//指定查询的列名
selection,//指定where的约束条件
selectionArgs,//为where中的占位符提供具体的值
sortOrder);//指定查询结果的排序方式
if(cursor != null){
while(cursor.moveToNext()){
String column1 = cursor.getString(cursor.getColumnIndex("column1"));
int column2 = cursor.getInt(cursor.getColumnIndex("column2"));
}
cursor.close();
}
データを追加します。
ContentValues values = new ContentValues();
values.put("column1","text");
values.put("column2","1");
getContentResolver().insert(uri,values);
ご覧のとおり、追加されるデータは引き続きContentValuesにアセンブルされ、ContentResolverのinsert()メソッドが呼び出され、UriとContentValuesがパラメーターとして渡されます。
データを更新する
ContentValues values= new ContentValues();
values.put("column1","");
getContentResolver().update(uri,values,"column1 = ? and column2 = ?",new String []{
"text","1"});
上記のコードは、selectionおよびselectionArgsパラメーターを使用して、更新するデータを制約し、すべての行が影響を受けないようにすることに注意してください。
データの一部を削除する
getContentResolver().delete(uri,"column2 = ?",new String[]{
"1"});