創(chuàng)建 Stub Content Provider

原文:http://developer.android.com/training/sync-adapters/creating-stub-provider.html

Sync Adapter 框架是設(shè)計(jì)成用來(lái)和設(shè)備數(shù)據(jù)一起工作的按摘,而這些設(shè)備數(shù)據(jù)應(yīng)該被靈活且安全的 Content Provider 框架管理划栓。因此名斟,Sync Adapter 框架會(huì)期望應(yīng)用已經(jīng)為它的本地?cái)?shù)據(jù)定義了 Content Provider锯蛀。如果 Sync Adapter 框架嘗試去運(yùn)行我們的 Sync Adapter扭仁,而我們的應(yīng)用沒有一個(gè) Content Provider 的話致稀,那么 Sync Adapter 將會(huì)崩潰宗苍。

如果我們正在開發(fā)一個(gè)新的應(yīng)用,它將數(shù)據(jù)從服務(wù)器傳輸?shù)揭慌_(tái)設(shè)備上佃却,那么我們務(wù)必考慮將本地?cái)?shù)據(jù)存儲(chǔ)于 Content Provider 中者吁。除了它對(duì)于 Sync Adapter 的重要性之外,Content Provider 還可以提供許多安全上的好處饲帅,更何況它是專門為了在 Android 設(shè)備上處理數(shù)據(jù)存儲(chǔ)而設(shè)計(jì)的复凳。要學(xué)習(xí)如何創(chuàng)建一個(gè) Content Provider瘤泪,可以閱讀:Creating a Content Provider

然而育八,如果我們已經(jīng)通過別的形式來(lái)存儲(chǔ)本地?cái)?shù)據(jù)对途,我們?nèi)匀豢梢允褂?Sync Adapter 來(lái)處理數(shù)據(jù)傳輸。為了滿足 Sync Adapter 框架對(duì)于 Content Provider 的要求髓棋,我們可以在應(yīng)用中添加一個(gè) Stub Content Provider实檀。一個(gè) Stub Content Provider 實(shí)現(xiàn)了 Content Provider 類,但是所有的方法都返回null或者0仲锄。如果我們添加了一個(gè) Stub Content Provider劲妙,那么無(wú)論數(shù)據(jù)存儲(chǔ)機(jī)制是什么湃鹊,我們都可以使用 Sync Adapter 來(lái)傳輸數(shù)據(jù)儒喊。

如果在我們的應(yīng)用中已經(jīng)有了一個(gè) Content Provider,那么我們就不需要?jiǎng)?chuàng)建 Stub Content Provider 了币呵。在這種情況下怀愧,我們可以略過這節(jié)課程,直接進(jìn)入:創(chuàng)建 Sync Adapter余赢。如果你還沒有創(chuàng)建 Content Provider芯义,這節(jié)課將向你展示如何通過添加一個(gè) Stub Content Provider,將你的 Sync Adapter 添加到框架中妻柒。

添加一個(gè) Stub Content Provider

要為我們的應(yīng)用創(chuàng)建一個(gè) Stub Content Provider扛拨,首先繼承ContentProvider類,并且在所有需要重寫的方法中举塔,我們一律不進(jìn)行任何處理而是直接返回绑警。下面的代碼片段展示了我們應(yīng)該如何創(chuàng)建一個(gè) Stub Content Provider:

/*

* Define an implementation of ContentProvider that stubs out

* all methods

*/publicclassStubProviderextendsContentProvider{/*

* Always return true, indicating that the

* provider loaded correctly.

*/@OverridepublicbooleanonCreate(){returntrue;? ? }/*

* Return an empty String for MIME type

*/@OverridepublicStringgetType(){returnnewString();? ? }/*

* query() always returns no results

*

*/@OverridepublicCursorquery(

Uri uri,

String[] projection,

String selection,

String[] selectionArgs,

String sortOrder){returnnull;? ? }/*

* insert() always returns null (no URI)

*/@OverridepublicUriinsert(Uri uri, ContentValues values){returnnull;? ? }/*

* delete() always returns "no rows affected" (0)

*/@Overridepublicintdelete(Uri uri, String selection, String[] selectionArgs){return0;? ? }/*

* update() always returns "no rows affected" (0)

*/publicintupdate(

Uri uri,

ContentValues values,

String selection,

String[] selectionArgs){return0;? ? }}

在 Manifest 清單文件中聲明 Provider

Sync Adapter 框架會(huì)通過查看應(yīng)用的 manifest 文件中是否聲明了 provider,來(lái)驗(yàn)證我們的應(yīng)用是否使用了 Content Provider央渣。為了在 manifest 清單文件中聲明我們的 Stub Content Provider计盒,添加一個(gè)標(biāo)簽,并讓它擁有下列屬性字段:

android:name="com.example.android.datasync.provider.StubProvider"

指定實(shí)現(xiàn) Stub Content Provider 類的完整包名芽丹。

android:authorities="com.example.android.datasync.provider"

指定 Stub Content Provider 的 URI Authority北启。用應(yīng)用的包名加上字符串".provider"作為該屬性字段的值。雖然我們?cè)谶@里向系統(tǒng)聲明了 Stub Content Provider拔第,但是不會(huì)嘗試訪問 Provider 本身咕村。

android:exported="false"

確定其它應(yīng)用是否可以訪問 Content Provider。對(duì)于 Stub Content Provider 而言蚊俺,由于沒有讓其它應(yīng)用訪問該 Provider 的必要培廓,所以我們將該值設(shè)置為false。該值并不會(huì)影響 Sync Adapter 框架和 Content Provider 之間的交互春叫。

android:syncable="true"

該標(biāo)識(shí)指明 Provider 是可同步的肩钠。如果將這個(gè)值設(shè)置為true泣港,那么將不需要在代碼中調(diào)用setIsSyncable()。這一標(biāo)識(shí)將會(huì)允許 Sync Adapter 框架和 Content Provider 進(jìn)行數(shù)據(jù)傳輸价匠,但是僅僅在我們顯式地執(zhí)行相關(guān)調(diào)用時(shí)当纱,這一傳輸時(shí)才會(huì)進(jìn)行。

下面的代碼片段展示了我們應(yīng)該如何將標(biāo)簽添加到應(yīng)用的 manifest 清單文件中:

......

現(xiàn)在我們已經(jīng)創(chuàng)建了所有 Sync Adapter 框架所需要的依賴項(xiàng)踩窖,接下來(lái)我們可以創(chuàng)建封裝數(shù)據(jù)傳輸代碼的組件了坡氯。該組件就叫做 Sync Adapter。在下節(jié)課中洋腮,我們將會(huì)展示如何將這一組件添加到應(yīng)用中箫柳。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市啥供,隨后出現(xiàn)的幾起案子悯恍,更是在濱河造成了極大的恐慌,老刑警劉巖伙狐,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涮毫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡贷屎,警方通過查閱死者的電腦和手機(jī)罢防,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)唉侄,“玉大人咒吐,你說我怎么就攤上這事∈艋” “怎么了恬叹?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)榴嗅。 經(jīng)常有香客問我妄呕,道長(zhǎng),這世上最難降的妖魔是什么嗽测? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任绪励,我火速辦了婚禮,結(jié)果婚禮上唠粥,老公的妹妹穿的比我還像新娘疏魏。我一直安慰自己,他們只是感情好晤愧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布大莫。 她就那樣靜靜地躺著,像睡著了一般官份。 火紅的嫁衣襯著肌膚如雪只厘。 梳的紋絲不亂的頭發(fā)上烙丛,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音羔味,去河邊找鬼河咽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛赋元,可吹牛的內(nèi)容都是我干的忘蟹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼搁凸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼媚值!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起护糖,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤褥芒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后椅文,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喂很,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惜颇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年皆刺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凌摄。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡羡蛾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锨亏,到底是詐尸還是另有隱情痴怨,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布器予,位于F島的核電站浪藻,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏乾翔。R本人自食惡果不足惜爱葵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望反浓。 院中可真熱鬧萌丈,春花似錦、人聲如沸雷则。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)月劈。三九已至度迂,卻和暖如春藤乙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背惭墓。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工湾盒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诅妹。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓罚勾,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親吭狡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子尖殃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)划煮,斷路器送丰,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 原文:http://developer.android.com/training/sync-adapters/cr...
    tiger桂閱讀 468評(píng)論 0 0
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,139評(píng)論 25 707
  • 原文:http://developer.android.com/training/sync-adapters/ru...
    tiger桂閱讀 513評(píng)論 0 2
  • 今天去區(qū)政府參加教師節(jié)表彰大會(huì)暨文藝匯演。璀璨的燈光弛秋、靚麗的畫面器躏、良好的視覺和音響效果、多樣的節(jié)目形式讓我應(yīng)...
    做思考的踐行者YIMI閱讀 1,427評(píng)論 1 7