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,

  • 最後に頭に合意声明をつければいいです.
    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)