关于ContentProviderContentResolver的学习与使用
一、ContentProvider的定義
1.ContentProvider是Android的四大組件
2.ContentProvider是一種數(shù)據(jù)包裝器(發(fā)布者),它提供統(tǒng)一的接口對數(shù)據(jù)進(jìn)行操作,調(diào)用者不用關(guān)心數(shù)據(jù)到底是如何存儲的
3.ContentProvider主要用于不同APP間,不同進(jìn)程間的數(shù)據(jù)分享
二、ContentProvider的使用步驟
- 使用SQLite技術(shù),創(chuàng)建好數(shù)據(jù)庫和數(shù)據(jù)表
- 新建類繼承ContentProvider
- 創(chuàng)建UriMatcher定義Uri規(guī)則
- 重寫6個抽象方法(onCreate,insert,delete,getType,update,query)
- 在AndroidManifest中注冊Provider
- ContentProvider,對ContentProvider共享的數(shù)據(jù)進(jìn)行增刪改查
三、ContentResolver的定義
1.ContentResolver是數(shù)據(jù)調(diào)用者,ContentProvider將數(shù)據(jù)發(fā)布出來后,通過ContentResolver對象結(jié)合Uri進(jìn)行調(diào)用
2.通過ContentResolver可以調(diào)用ContentProvider的增,刪,改,查操作
注意點(diǎn):****ContentProvider和ContentResolver無疑是很重要的,而在它們之間進(jìn)行數(shù)據(jù)傳遞的,也是很重要的,就是Uri
四、Uri的定義
1.通用資源的標(biāo)識符,簡稱Uri
2.Uri代表要操作數(shù)據(jù)的地址,每個ContentProvider發(fā)布數(shù)據(jù)時都有一個唯一的地址
3.Uri的標(biāo)準(zhǔn)寫法:content://com.android.contacts/contacts
注意點(diǎn):*在調(diào)用ContentProvider前,必須要先確定Uri***
五、UriMatcher類的定義
1.UriMatcher是用于匹配Uri的Uri規(guī)則工具類
2.當(dāng)調(diào)用者傳遞過來的Uri時,需要對Uri進(jìn)行解析,確定調(diào)用者需要執(zhí)行哪個操作
六、ContentProvider&ContentResolver結(jié)合使用的示例(以增為例)
因為ContentProvider是跨APP調(diào)用的,所以我們要創(chuàng)建兩個Activity,我在這里簡稱為ActivityA和ActivityB
1.首先在ActivityA里新建一個類繼承ContentProvider,在里面實(shí)現(xiàn)他的幾個構(gòu)造方法
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.然后回到主體類里定義這些控件,設(shè)置點(diǎn)擊事件,寫出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里的點(diǎn)擊方法里寫出增的具體代碼
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寫的網(wǎng)址要和注冊時的網(wǎng)址一樣
筆芯!
總結(jié)
以上是生活随笔為你收集整理的关于ContentProviderContentResolver的学习与使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android的contentprovi
- 下一篇: 第一个iBATIS测试就通不过