日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于ContentProviderContentResolver的学习与使用

發布時間:2023/12/31 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于ContentProviderContentResolver的学习与使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、ContentProvider的定義

1.ContentProvider是Android的四大組件
2.ContentProvider是一種數據包裝器(發布者),它提供統一的接口對數據進行操作,調用者不用關心數據到底是如何存儲的
3.ContentProvider主要用于不同APP間,不同進程間的數據分享

二、ContentProvider的使用步驟

  • 使用SQLite技術,創建好數據庫和數據表
  • 新建類繼承ContentProvider
  • 創建UriMatcher定義Uri規則
  • 重寫6個抽象方法(onCreate,insert,delete,getType,update,query)
  • 在AndroidManifest中注冊Provider
  • ContentProvider,對ContentProvider共享的數據進行增刪改查

三、ContentResolver的定義

1.ContentResolver是數據調用者,ContentProvider將數據發布出來后,通過ContentResolver對象結合Uri進行調用
2.通過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時,需要對Uri進行解析,確定調用者需要執行哪個操作

六、ContentProvider&ContentResolver結合使用的示例(以增為例)

因為ContentProvider是跨APP調用的,所以我們要創建兩個Activity,我在這里簡稱為ActivityA和ActivityB
1.首先在ActivityA里新建一個類繼承ContentProvider,在里面實現他的幾個構造方法

public class MyContentProivder extends ContentProvider {private String TAG="MyContentProivder";@Overridepublic boolean onCreate() {Log.e(TAG, "onCreate************************ " );return false;}@Nullable@Overridepublic Cursor query(@NonNull Uri uri, @Nullable String[] strings, @Nullable String s, @Nullable String[] strings1, @Nullable String s1) {Log.e(TAG, "query************************ " );return null;}@Nullable@Overridepublic String getType(@NonNull Uri uri) {Log.e(TAG, "getType************************ " );return null;}@Nullable@Overridepublic Uri insert(@NonNull Uri uri, @Nullable ContentValues contentValues) {Log.e(TAG, "insert************************ " );return null;}@Overridepublic int delete(@NonNull Uri uri, @Nullable String s, @Nullable String[] strings) {Log.e(TAG, "delete************************ " );return 1;}@Overridepublic int update(@NonNull Uri uri, @Nullable ContentValues contentValues, @Nullable String s, @Nullable String[] strings) {Log.e(TAG, "update************************ " );return 0;} }

2.然后在該Activity的AndroidManifest里注冊Provider

<provider android:enabled="true"android:exported="true"android:authorities="com.example.studentdemo.db"android:name=".entity.MyContentProivder"/>

3.然后到ActivityB里的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;@Overrideprotected 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);}@Overridepublic 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.最后回到ActivityB里的點擊方法里寫出增的具體代碼

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寫的網址要和注冊時的網址一樣
筆芯!

總結

以上是生活随笔為你收集整理的关于ContentProviderContentResolver的学习与使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。