ContentProvider和ContentResovler

1.在同一系統(tǒng)中裝載了一個又一個的App骨坑,每個App之間有可能需要數(shù)據(jù)共享,App之間實現(xiàn)數(shù)據(jù)共享當(dāng)然可以使用SharedPreferences柬采、文件或數(shù)據(jù)庫等欢唾,但是這種方式不僅比較麻煩,而且存在嚴(yán)重的安全漏洞粉捻,所以在Android4.2以后不再推薦使用這種方式礁遣,而是推薦使用ContentProvider

2.其實ContentProvider和ContentResovler是成對使用,從字面上ContentProvider和ContentResovler可翻譯為:內(nèi)容提供者 和 內(nèi)容接收者

3.開發(fā)ContentProvider子類AlitanContentProvider

步驟1:子類需要實現(xiàn)父類方法query()肩刃、inser()祟霍、update()和delete()方法;

步驟2:在AndroidManifest中注冊ContentProvider并指定android:authorities屬性

4.AlitanContentProvider子類代碼實現(xiàn)如下

/**

* Created by alitan2014 on 2017/9/8.

*/

public classAlitanContentProviderextendsContentProvider {

privateHandlermHandler;

public voidonMessage(Handler handler){

mHandler= handler;

}

@Override

public booleanonCreate() {

JSONObject object =newJSONObject();

try{

object.put("method","onCreate");

}catch(JSONException e) {

e.printStackTrace();

}

Message message =newMessage();

message.obj= object;

message.what=0x123;

if(mHandler!=null){

mHandler.sendMessage(message);

}

System.out.println("onCreate");

return true;

}

@Nullable

@Override

publicCursorquery(@NonNullUri uri,@NullableString[] projection,@NullableString selection,@NullableString[] selectionArgs,@NullableString sortOrder) {

JSONObject object =newJSONObject();

try{

object.put("method","query");

Message message =newMessage();

message.obj= object;

message.what=0x123;

if(mHandler!=null){

mHandler.sendMessage(message);

}

System.out.println("onCreate");

}catch(JSONException e) {

e.printStackTrace();

}

return null;

}

@Nullable

@Override

publicStringgetType(@NonNullUri uri) {

return null;

}

@Nullable

@Override

publicUriinsert(@NonNullUri uri,@NullableContentValues values) {

JSONObject object =newJSONObject();

try{

object.put("method","insert");

Message message =newMessage();

message.obj= object;

message.what=0x123;

if(mHandler!=null){

mHandler.sendMessage(message);

}

System.out.println("insert");

}catch(JSONException e) {

e.printStackTrace();

}

returnUri.parse("www.baidu.com");

}

@Override

public intdelete(@NonNullUri uri,@NullableString selection,@NullableString[] selectionArgs) {

JSONObject object =newJSONObject();

try{

object.put("method","delete");

Message message =newMessage();

message.obj= object;

message.what=0x123;

if(mHandler!=null){

mHandler.sendMessage(message);

}

System.out.println("delete");

}catch(JSONException e) {

e.printStackTrace();

}

return0;

}

@Override

public intupdate(@NonNullUri uri,@NullableContentValues values,@NullableString selection,@NullableString[] selectionArgs) {

JSONObject object =newJSONObject();

try{

object.put("method","update");

Message message =newMessage();

message.obj= object;

message.what=0x123;

if(mHandler!=null){

mHandler.sendMessage(message);

}

System.out.println("update");

}catch(JSONException e) {

e.printStackTrace();

}

return0;

}

}

5.在Androidmanifest中注冊AlitanContentProvoder如下

android:authorities="alitan2014.com.contentprovider.AlitanContentProvider"

android:name=".AlitanContentProvider"

android:exported="true"

/>

6.在另外一個應(yīng)用獲取ContentResovler,并調(diào)用query(),insert(),update,delete()方法盈包,實際上是通過ContentProvider暴露在外部的URI浅碾,調(diào)用到了AlitanContentProvider中的query(),insert(),update,delete()方法,實現(xiàn)方法如下

ublic classMainActivityextendsAppCompatActivity {

privateContentResolverresolver;

privateUriuri= Uri.parse("content://alitan2014.com.contentprovider.AlitanContentProvider/");

@Override

protected voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

resolver= getContentResolver();

}

public voidquery(View view){

Cursor cursor =resolver.query(uri,null,"query_where",null,null);

Toast.makeText(MainActivity.this,"其他應(yīng)用返回的內(nèi)容:"+cursor,Toast.LENGTH_SHORT).show();

}

public voidinsert(View view){

ContentValues contentValues =newContentValues();

contentValues.put("method","insert");

Uri newUri =resolver.insert(uri,contentValues);

Toast.makeText(MainActivity.this,"新插入的URI為:"+newUri,Toast.LENGTH_SHORT).show();

}

public voidupdate(View view){

ContentValues contentValues =newContentValues();

contentValues.put("method","update");

intcount =resolver.update(uri,contentValues,"update_where",null);

Toast.makeText(MainActivity.this,"更新的的URI為:"+count,Toast.LENGTH_SHORT).show();

}

public voiddelete(View view){

ContentValues contentValues =newContentValues();

contentValues.put("method","update");

intcount =resolver.delete(uri,"delete_where",null);

Toast.makeText(MainActivity.this,"delete返回值為:"+count,Toast.LENGTH_SHORT).show();

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末续语,一起剝皮案震驚了整個濱河市垂谢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疮茄,老刑警劉巖滥朱,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異力试,居然都是意外死亡徙邻,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門畸裳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缰犁,“玉大人,你說我怎么就攤上這事怖糊∷荩” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵伍伤,是天一觀的道長并徘。 經(jīng)常有香客問我,道長扰魂,這世上最難降的妖魔是什么麦乞? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任蕴茴,我火速辦了婚禮,結(jié)果婚禮上姐直,老公的妹妹穿的比我還像新娘倦淀。我一直安慰自己,他們只是感情好声畏,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布晃听。 她就那樣靜靜地躺著,像睡著了一般砰识。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上佣渴,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天辫狼,我揣著相機(jī)與錄音,去河邊找鬼辛润。 笑死膨处,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的砂竖。 我是一名探鬼主播真椿,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼乎澄!你這毒婦竟也來了突硝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤置济,失蹤者是張志新(化名)和其女友劉穎解恰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浙于,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡护盈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了羞酗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腐宋。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖檀轨,靈堂內(nèi)的尸體忽然破棺而出胸竞,到底是詐尸還是另有隱情,我是刑警寧澤参萄,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布撤师,位于F島的核電站,受9級特大地震影響拧揽,放射性物質(zhì)發(fā)生泄漏剃盾。R本人自食惡果不足惜腺占,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望痒谴。 院中可真熱鬧衰伯,春花似錦、人聲如沸积蔚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尽爆。三九已至怎顾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間漱贱,已是汗流浹背槐雾。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留幅狮,地道東北人募强。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像崇摄,于是被迫代替她去往敵國和親擎值。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容