ContentProviderはプログラム間でデータを共有する(一)
9183 ワード
##概要##異なるアプリケーション間でデータ共有を実現するための機能で、1つのプログラムが別のプログラムのデータにアクセスできるようにする完全なメカニズムを提供し、同時に訪問されたデータの安全性を保証し、ContentProviderを使用することはAndroidを使用してプログラム間でデータを共有する標準的な方法である.ファイルストレージとSharedPreferencesとは異なり、ContentProviderはどの部分のデータのみを共有するかを選択できます.
##ContentProviderの使い方##既存のContentProviderを使用して、対応するプログラムのデータを読み取り、操作します. 独自のContentProviderを作成し、プログラムのデータに外部アクセスインタフェースを提供します.
##ContentResolver使用法##各アプリケーションでContentProviderで共有されているデータにアクセスするには、必ずContentResolverクラスを利用して、ContentのgetContentResolver()メソッドでクラス変更のインスタンスを取得します.ContentResolverは、データをCRUD操作するための一連の方法を提供する. insert()挿入 update()更新 delete()削除 query()クエリ SqLiteDatabaseとは異なり、ContentResolverのインクリメンタルチェックではテーブル名パラメータは受信されず、Uriパラメータの代わりに1つのUriパラメータが使用されます.このパラメータはコンテンツURIと呼ばれます.コンテンツURIはContentProviderのデータに一意の識別子を確立し、主にauthorityとpathの2つの部分から構成される. authority:異なるアプリケーションを区別するために使用され、一般的にパッケージ名で命名されます.例えば、あるプログラムのパッケージ名はcom.example.appでは、プログラムのauthorityは:comと命名することができます.example.app.provider. path:同じアプリケーションの異なるテーブルを区別するために使用するもので、通常authorityの後ろに追加されます.例えば、あるプログラムのデータベースに2枚のテーブルがあり、table 1とtable 2、pathはそれぞれ/table 1と/table 2と命名され、authorityとpathを組み合わせてコンテンツURIがcomになります.example.app.provider/table 1とcom.example.app.provider/table2,
最後に頭に合意声明をつければいいです.
コンテンツURI文字列が得られた後,パラメータとして伝達するにはUriオブジェクトとして解析する必要がある.
##クエリー##
このUriオブジェクトを使用してtable 1テーブルのデータをクエリーできるようになりました.
これらのパラメータはSQLiteDatabaseのquery()メソッドのパラメータとよく似ています.
query()パラメータ
対応SQLセクション
説明
uri
from table_name
アプリケーションの下にあるテーブルをクエリーすることを指定します.
projection
select column1,column2
クエリーの列名の指定
selection
where column=value
whereの制約の指定
selectionArgs
-
whereのプレースホルダに特定の値を指定します.
sortOrder
order by column1,column2
クエリー結果のソート方法の指定
クエリーが完了すると、Cursorオブジェクトが返されます.カーソルの位置を移動することで、Cursorのすべてのローを巡回し、対応するカラムのデータを取り出すという考え方です.
##を追加
##更新##column 1の値をクリア
##削除##
第1部が終了したら、第2部をクリックします->ContentProviderプログラム間でデータを共有します(2)
##ContentProviderの使い方##
##ContentResolver使用法##各アプリケーションでContentProviderで共有されているデータにアクセスするには、必ずContentResolverクラスを利用して、ContentのgetContentResolver()メソッドでクラス変更のインスタンスを取得します.ContentResolverは、データをCRUD操作するための一連の方法を提供する.
最後に頭に合意声明をつければいいです.
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オブジェクトを使用してtable 1テーブルのデータをクエリーできるようになりました.
Cursor cursor=getContentResolver().query(
uri,
projection,
selection,
selectionArgs,
sortOrder);
これらのパラメータはSQLiteDatabaseのquery()メソッドのパラメータとよく似ています.
query()パラメータ
対応SQLセクション
説明
uri
from table_name
アプリケーションの下にあるテーブルをクエリーすることを指定します.
projection
select column1,column2
クエリーの列名の指定
selection
where column=value
whereの制約の指定
selectionArgs
-
whereのプレースホルダに特定の値を指定します.
sortOrder
order by column1,column2
クエリー結果のソート方法の指定
クエリーが完了すると、Cursorオブジェクトが返されます.カーソルの位置を移動することで、Cursorのすべてのローを巡回し、対応するカラムのデータを取り出すという考え方です.
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);
##更新##column 1の値をクリア
ContentValues values=new ContentValues();
values.put("column1"," ");
getContentResolver().update(uri,values,"column1=? and column2=?",new String[]{"text",1});
##削除##
getContentResolver().delete(uri,"column2=?",new String[]{"1"});
第1部が終了したら、第2部をクリックします->ContentProviderプログラム間でデータを共有します(2)