ContentProvider&ContentResolverの学習と使用について
10274 ワード
一、ContentProviderの定義
1.ContentProviderはAndroidの4大コンポーネントである.ContentProviderは、データがどのように格納されているかにかかわらず、統一的なインタフェースを提供するデータパッケージ(パブリッシャ)です.ContentProviderは主に異なるAPP間、異なるプロセス間のデータ共有に使用されます.
二、ContentProviderの使用手順 SQLiteテクノロジーを使用して、データベースとデータテーブル を作成します.新規クラス継承ContentProvider UriMatcher定義Uriルールを作成する 6個の抽象メソッド(onCreate,insert,delete,getType,update,query) を書き換える AndroidManifestにProvider を登録 ContentProvider,ContentProviderが共有するデータを添削して を調べる.
三、ContentResolverの定義
1.contentResolverはデータ呼び出し者であり、ContentProviderがデータを発行した後、ContentResolverオブジェクトを介してUriと結合する呼び出しを行う.ContentResolverでContentProviderの追加、削除、変更、検索操作を呼び出すことができます.
注意点:****ContentProviderとContentResolverは間違いなく重要であり、それらの間でデータの伝達を行うことも重要であり、Uriである.
四、Uriの定義
1.汎用リソースの識別子、略称Uri 2.Uriはデータを操作するアドレスを表し、ContentProviderごとにデータを発行する際に一意のアドレス3がある.Uriの標準表記:content://com.android.contacts/contacts
注意:*ContentProviderを呼び出す前に、Uri***を確認する必要があります.
五、UriMatcherクラスの定義
1.UriMatcherは、UriにマッチするためのUriルールツールクラス2である.呼び出し元から渡されたUriを解析し,呼び出し元がどの操作を実行する必要があるかを決定する必要がある.
六、ContentProvider&ContentResolverを組み合わせて使用した例(増を例とする)
ContentProviderはAPP間で呼び出されるので、Activityを2つ作成します.ここではActivity AとActivity Bと略称します.まずActivity Aにクラス継承ContentProviderを新設し,その中で彼のいくつかの構造方法を実現する
2.そしてこのActivityのAndroidマニフェストにProviderを登録
3.Activity Bのlayoutレイアウトに必要なコントロールを定義します
4.次にマスタークラスに戻ってこれらのコントロールを定義し、クリックイベントを設定し、switch判断文を書く
5.そしてActivityAのinsertメソッドに次のように書きます.
6.最後にActivity Bのクリック方法に戻って、追加の具体的なコードを書く
ここでは、Uriが書いたURLが登録時のURLと同じように芯があることに注意しましょう!
1.ContentProviderはAndroidの4大コンポーネントである.ContentProviderは、データがどのように格納されているかにかかわらず、統一的なインタフェースを提供するデータパッケージ(パブリッシャ)です.ContentProviderは主に異なるAPP間、異なるプロセス間のデータ共有に使用されます.
二、ContentProviderの使用手順
三、ContentResolverの定義
1.contentResolverはデータ呼び出し者であり、ContentProviderがデータを発行した後、ContentResolverオブジェクトを介してUriと結合する呼び出しを行う.ContentResolverでContentProviderの追加、削除、変更、検索操作を呼び出すことができます.
注意点:****ContentProviderとContentResolverは間違いなく重要であり、それらの間でデータの伝達を行うことも重要であり、Uriである.
四、Uriの定義
1.汎用リソースの識別子、略称Uri 2.Uriはデータを操作するアドレスを表し、ContentProviderごとにデータを発行する際に一意のアドレス3がある.Uriの標準表記:content://com.android.contacts/contacts
注意:*ContentProviderを呼び出す前に、Uri***を確認する必要があります.
五、UriMatcherクラスの定義
1.UriMatcherは、UriにマッチするためのUriルールツールクラス2である.呼び出し元から渡されたUriを解析し,呼び出し元がどの操作を実行する必要があるかを決定する必要がある.
六、ContentProvider&ContentResolverを組み合わせて使用した例(増を例とする)
ContentProviderはAPP間で呼び出されるので、Activityを2つ作成します.ここではActivity AとActivity Bと略称します.まずActivity Aにクラス継承ContentProviderを新設し,その中で彼のいくつかの構造方法を実現する
public class MyContentProivder extends ContentProvider {
private String TAG="MyContentProivder";
@Override
public boolean onCreate() {
Log.e(TAG, "onCreate************************ " );
return false;
}
@Nullable
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] strings, @Nullable String s, @Nullable String[] strings1, @Nullable String s1) {
Log.e(TAG, "query************************ " );
return null;
}
@Nullable
@Override
public String getType(@NonNull Uri uri) {
Log.e(TAG, "getType************************ " );
return null;
}
@Nullable
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues contentValues) {
Log.e(TAG, "insert************************ " );
return null;
}
@Override
public int delete(@NonNull Uri uri, @Nullable String s, @Nullable String[] strings) {
Log.e(TAG, "delete************************ " );
return 1;
}
@Override
public int update(@NonNull Uri uri, @Nullable ContentValues contentValues, @Nullable String s, @Nullable String[] strings) {
Log.e(TAG, "update************************ " );
return 0;
}
}
2.そしてこのActivityのAndroidマニフェストにProviderを登録
<provider
android:enabled="true"
android:exported="true"
android:authorities="com.example.studentdemo.db"
android:name=".entity.MyContentProivder"/>
3.Activity Bのlayoutレイアウトに必要なコントロールを定義します
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.contentresover.MainActivity">
<EditText
android:id="@+id/input_et"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/text_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=" "/>
LinearLayout>
4.次にマスタークラスに戻ってこれらのコントロールを定義し、クリックイベントを設定し、switch判断文を書く
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button textBtn;
private EditText inputET;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textBtn=findViewById(R.id.text_btn);
inputET=findViewById(R.id.input_et);
textBtn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.text_btn:
5.そしてActivityAのinsertメソッドに次のように書きます.
DBHelper dbHelper=new DBHelper(getContext(),"student_db",null,1);
SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("name","zhangsan");
sqLiteDatabase.insert("student",null,values);
return null;
6.最後にActivity Bのクリック方法に戻って、追加の具体的なコードを書く
String name=inputET.getText().toString();
Uri uri=Uri.parse("content://com.example.studentdemo.db/student");
ContentResolver resolver=getContentResolver();
ContentValues values=new ContentValues();
values.put("name",name);
resolver.insert(uri,values);
break;
ここでは、Uriが書いたURLが登録時のURLと同じように芯があることに注意しましょう!