在Android 應(yīng)用程序之間數(shù)據(jù)共享—-ContentResolver中,已經(jīng)說明了Android是如何實現(xiàn)應(yīng)用程序之間數(shù)據(jù)共享的,并詳細解析了如何獲取其他應(yīng)用程序共享的數(shù)據(jù)。ContentProviders存儲和檢索數(shù)據(jù),通過它可以讓所有的應(yīng)用程序訪問到,這也是應(yīng)用程序之間唯一共享數(shù)據(jù)的方法。那么如何將應(yīng)用程序的數(shù)據(jù)暴露出去?
通過以前文章的學(xué)習(xí),知道ContentResolver是通過ContentProvider來獲取其他與應(yīng)用程序共享的數(shù)據(jù),那么ContentResolver與ContentProvider的接口應(yīng)該差不多的。其中ContentProvider負責(zé)組織應(yīng)用程序的數(shù)據(jù);向其他應(yīng)用程序提供數(shù)據(jù);ContentResolver則負責(zé)獲取ContentProvider提供的數(shù)據(jù);修改/添加/刪除更新數(shù)據(jù)等;
ContentProvider 是如何向外界提供數(shù)據(jù)的?
Android提供了ContentProvider,一個程序可以通過實現(xiàn)一個ContentProvider的抽象接口將自己的數(shù)據(jù)完全暴露出去,而且ContentProviders是以類似數(shù)據(jù)庫中表的方式將數(shù)據(jù)暴露,也就是說ContentProvider就像一個“數(shù)據(jù)庫”。那么外界獲取其提供的數(shù)據(jù),也就應(yīng)該與從數(shù)據(jù)庫中獲取數(shù)據(jù)的操作基本一樣,只不過是采用URI來表示外界需要訪問的“數(shù)據(jù)庫”。至于如何從URI中識別出外界需要的是哪個“數(shù)據(jù)庫”,這就是Android底層需要做的事情了,不在此詳細說。簡要分析下ContentProvider向外界提供數(shù)據(jù)操作的接口:
query(Uri, String[], String, String[], String)
insert(Uri, ContentValues)
update(Uri, ContentValues, String, String[])
delete(Uri, String, String[])
這些操作與數(shù)據(jù)庫的操作基本上完全一樣,在此不詳細說,需要特殊說明的地方是URI:
在URI的D部分可能包含一個_ID ,這個應(yīng)該出現(xiàn)在SQL語句中的,可以以種特殊的方式出現(xiàn),這就要求我們在提供數(shù)據(jù)的時候,需要來額外關(guān)注這個特殊的信息。Android SDK推薦的方法是:在提供數(shù)據(jù)表字段中包含一個ID,在創(chuàng)建表時INTEGER PRIMARY KEY AUTOINCREMENT標(biāo)識此ID字段
新聞熱點
疑難解答
圖片精選