繼續完成連載博客,上次介紹的是Service相關的基礎知識,這次爲大家帶來ContentResolver的相關解釋和說明。希望博客能給諸位一點小小的幫助!
內容提供器:
主要用於不同程序間數據共享,它提供了一套完整的機制,既能完成數據的交互還能保證數據的安全性。
用法有兩種:
1.使用現有的內容提供器來讀取和操作相應程序的數據。(讀取聯繫人的例子)
private void readContacts(){
Cursor cursor=null;
try{
cursor=getContentResolver().query(ContactsContract.CommanDataKinds.Phone.CONTENT_URI,null,null,null,null);
while(cursor.moveToNext()){
String displayNanme = cursor.getString(cursor.getColumnIndex(ContactsContract.CommanDataKinds.Phone.DISPLAY_NAME));
String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommanDataKinds.Phone.NUMBER));
}catch(Exception e){
e.printStackTrace();
}finally{
if(cursor!=null){
cursor.close();
}
}
}
}
用Cursor類封裝全部getContentResolver().query查詢出的數據,然後在分別取出。
2.創建自己的內容提供器給我們程序的數據提供外部訪問的接口。
通過新建一個類去繼承ContentProvider的方式來創建一個自己的內容提供器。ContentProvider中有六個抽象方法,需要重寫。
public class MyProvider extends ContentProvider{
@Override
public boolean onCreate(){
return false;
}
@Override
public Cursor query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder){
return null;
}
@Override
public Uri insert(Uri uri,ContentValues values){
return null;
}
@Override
public int update(Uri uri,ContentValues values,String selection,String[] selectionArgs){
return 0;
}
@Override
public int delete(Uri uri,String selection,String[] selectionArgs){
return 0;
}
@Override
public String getType(Uri uri){
return null;
}
}
1.onCreate()初始化內容提供器的時候調用,true成功,false失敗。
2.query()從提供器中查詢數據,projection用於確定查詢哪些列,selection和selectionArgs用於查詢哪些行,sortOrder對結果進行排序,查詢的結果放在Cursor對象中返回。
3.insert()添加數據的方法
4.update()更新內容提供器裏已有的數據。
5.delete()刪除數據的方法
6.getType()根據傳入的內容的URI來返回相應的MIME類型。
實現跨進程數據共享:
由於過程實在太過複雜,還需要SQLite數據庫,SharedPreference,IO流等知識,不適合於基礎篇,以後若是有機會我再爲各位看官加一篇深度解析博客,將上面提到的知識點細分整理再寫出來,而這裏就不對跨進程數據共享深入解讀了!
------------------------------------------------------------------------------------------------------
好的,至此關於四大組件的相關內容就介紹的差不多了。下篇開始記錄更多幾個安卓核心的功能和應用!敬請關注下一篇:界面UI相關知識點。