標籤:

Android四大組件之三(Content Provider)

* author:conowen@大鐘* E-mail:conowen@hotmail.com* http://blog.csdn.net/conowen 1、Content Provider(內容提供者)簡介從字面上的意思來看,Content Providers是內容提供者,也就是數據的提供者,而數據的來源可以是SQLite資料庫或者File存儲等等方式。為了實現各個應用程序之間的數據共享,可以把應用程序的私有數據封裝成ContentProviders,接著定義一個URI,向外提供統一的數據介面。其他的應用程序可以通過這個URI來訪問指定的數據,然後實現各種操作,如添加(insert)、刪除 (delete)、查詢(query)、修改(update)。而不用去操作應用程序的底層私有數據。一般來說底層的私有數據是基於SQLite建立的。和其他app共享數據的大體過程:為方便其它app與用戶的應用程序的ContentProvider通信,通常要自定義一個公共的Uri:CONTENT_URI,其它app通過這一Uri,與ContentProvider交流。需要注意的是,當用戶自己建立好ContentProvider之後,並不直接與之打交道,而是通過ContentResolver進行操作。2、Content Provider的使用2.1、利用ContentResolver方法管理content ProviderAndroid提供了ContentResolver(內容分解器),外界的程序可以通過ContentResolver的方法來管理ContentProvider提供的數據。簡單來說,Resolver就是分解、管理 Provider的數據內容。在理解Resolver之前,應該知道URI。事實上可以這樣理解,URI就是一個地址,對應著Content Provider的數據內容(關於URI的更詳細部分,可參看文章最後)。ContentResolver是通過URI來查詢ContentProvider,ContentResolver採用的是類似資料庫的操作(SQLite)來從Content providers中獲取數據。ContentResolver的主要介面方法,如下:(來自android 官方文檔)返回值函數聲明final Uriinsert(Uri url, ContentValues values)Inserts a row into a table at the given URL.final intdelete(Uri url, String where, String[] selectionArgs)Deletes row(s) specified by a content URI.final Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)Query the given URI, returning a Cursor over the result set.final intupdate(Uri uri, ContentValues values, String where, String[] selectionArgs)Update row(s) in a content URI.要獲取ContentResolver的話,可以調用getContentResolver ()方法,a、例如下面演示query(查詢)方法:由上表可知query方法返回值為Cursor,代碼如下[java]獲得cursor (游標)(也可以用.managedQuery()方法來獲取cursor,兩者參數一樣,區別是第二種方法可以管理Cursor的生命周期。如Cursor cr = managedQuery(myPerson, null, null, null, null);)那為什麼要獲取Cursor呢?因為通過query(查詢)而得到的數據,要通過Cursor的方法來讀取。(只是讀取而已)b、其他方法(注意返回值)同樣地,比如把android改名為apple。可調用ContenResolver.update()方法。刪除單個記錄,調用ContentResolver.delete()方法,在參數中,指定到具體行即可。如果是刪除多個記錄,調用ContentResolver.delete()方法,URI參數指定Content Provider即可,並帶一個類似SQL的WHERE子句條件。2.2、如何把一個應用程序的數據共享出去。a、創建自己的Content provider(需要繼承ContentProvider類)b、如果這個應用程序的數據和已存在的Content provider數據結構是一致的,在獲得該Content provider的「寫」許可權之後,把數據寫到已存在的Content provider中。/********************************************附錄**********************************/1、URI的簡介通用資源標誌符(Universal Resource Identifier, 簡稱"URI")。Android上可用的每種資源 - 如圖像、視頻、通訊錄、簡訊等等都可以用URI來表示。URI也包括URL和和URN(為了便於理解,下面對比兩者)其中URL很容易理解,就是平常所說的網頁地址。眾所周知,URL不僅可以標識特定網站,也可以標識這個網站某個特定網頁。同樣地,URI不僅可以標識特定Content Provider,還可以標識這個應用程序的Content Provider中特定的資料庫表。這兩者是類似的關於三者更詳細的對比,可參考此文章http://www.eoeandroid.com/thread-526-1-1.html2、URI的組成部分一個完整的URI一般由4部分組成:將其分為A,B,C,D[java]A:通用前綴"content://",用來說明一個Content Provider控制這些數據。B:URI 的標識,它定義了是哪個Content Provider提供這些數據。對於第三方應用程序,為了保證URI標識的唯一性,它必須是一個完整的、小寫的 類名。這個標識在 元素的 authorities屬性中說明:一般是定義該ContentProvider的包.類的名稱 。C:資料庫中表的名字(如通訊錄)D:如果URI中包含表示需要獲取的記錄的ID;則就返回該ID對應的數據,如果沒有ID,就表示返回全部;(如讀取通訊錄時,有ID表示某個聯繫人,沒有ID表示整個通訊錄)Android系統提供了兩個用於操作Uri的工具類,分別為UriMatcher和ContentUris。UriMatcherUriMatcher 類主要用於匹配Uri.ContentUrisContentUris 類用於獲取Uri路徑後面的ID部分延伸閱讀:上一篇|下一篇博客專欄大鐘的Android_NDK開發文章:5篇閱讀:51724Android學習筆記文章:24篇閱讀:163757文章分類android編譯 (8)Android學習筆記 (24)JAVA學習 (1)C與C++ (2)Linux相關 (4)Android相關 (8)瑞芯微RK (3)嵌入式相關 (1)計算機相關 (2)Android多媒體&流媒體開發 (6)Android的NDK開發 (5)所想所感 (1)文章存檔2014年04月 (2)2012年08月 (6)2012年07月 (4)2012年06月 (1)2012年05月 (3)展開閱讀排行【整理】Android-Recovery Mode(recover模式詳解) (28454)Android學習筆記(21)————利用JDBC連接伺服器資料庫 (24609)Android的NDK開發(1)————Android JNI簡介與調用流程 (16944)RKAndroidTool工具的各項image詳解(RK2918版本) (15712)Android學習筆記(13)————利用SharedPreferences來保存應用程序的數據 (12391)Android學習筆記(12)————利用SQLiteOpenHelper來管理SQLite資料庫 (11473)Android多媒體開發(5)————利用Android AudioTrack播放mp3文件 (11141)Android的文件系統結構 (10904)Android的NDK開發(3)————JNI數據類型的詳解 (10423)Android多媒體開發(3)————使用Android NKD編譯havlenapetr-FFMpeg-7c27aa2 (10328)評論排行Android學習筆記(21)————利用JDBC連接伺服器資料庫 (65)關於havlenapetr-FFMpeg在Android 4.0(ICS)的補充說明 (63)Android多媒體開發(3)————使用Android NKD編譯havlenapetr-FFMpeg-7c27aa2 (49)Android多媒體開發(4)————移植Libmad到android平台 (41)Android多媒體開發(5)————利用Android AudioTrack播放mp3文件 (29)Android多媒體開發(2)————使用Android NKD編譯原版FFmpeg (11)Android學習筆記(12)————利用SQLiteOpenHelper來管理SQLite資料庫 (11)Android學習筆記(20)————利用ListView製作帶豎線的多彩表格 (10)Android的NDK開發(2)————利用Android NDK編寫一個簡單的HelloWorld (8)Android學習筆記(1)————Android四大組件之一(Activity) (8)推薦文章* python3自動爬笑話* Nagios伺服器端安裝部署詳解(1)* Android-自定義PopupWindow* Linux 高性能伺服器編程——高級I/O函數* 實例介紹Cocos2d-x精靈菜單和圖片菜單* Android 網路編程 API筆記 - java.net 包 許可權 地址 套接字 相關類 簡介最新評論Android上獲取優酷(youku),土豆(tudou),樂視(letv),愛奇藝(iqiyi)等HTML5頁面上的視頻真正地址ccl9110 : 這個方法只能獲取到第一段視頻的地址,如果視頻分成好幾段該怎麼獲取呢Android多媒體開發(5)————利用Android AudioTrack播放mp3文件yg33717 : @u013380383:自己用NDK編譯的,你可以自己去下mad.c的源碼再通過NDK編譯,博主前面...Android多媒體開發(5)————利用Android AudioTrack播放mp3文件不知道你媽的 : libmad.so那個文件哪裡下載的?Android多媒體開發(5)————利用Android AudioTrack播放mp3文件不知道你媽的 : @knight_ysq:問題解決了沒?Android多媒體開發(3)————使用Android NKD編譯havlenapetr-FFMpeg-7c27aa2conowen : 這個不能編譯的,編譯jni代碼還行,源代碼必須要在linux下面編譯Android多媒體開發(3)————使用Android NKD編譯havlenapetr-FFMpeg-7c27aa2huixinhappy : 您好,我想問一下Windows下用Cygwin能編譯Android源代碼,如果能編輯怎麼編譯呀?Android多媒體開發(2)————使用Android NKD編譯原版FFmpegzhaoshaolei123 : 您好!看到您的博客很興奮!因為寫的太好了!我是按著你博客的思路進行實踐的,但是在編譯過程中遇到了一點...編譯Android時,添加或者刪除system.img中第三方apk、更改Android系統默認語言行者歷程 : 關於添加第三方應用到system.img 如果第三方app存在有lib so庫的話 你如何解決 不要...Android學習筆記(21)————利用JDBC連接伺服器資料庫caiwenfeng_for_23 : 真機下可以嗎?android4.2可以載入驅動,但是連不上。Android學習筆記(12)————利用SQLiteOpenHelper來管理SQLite資料庫stoovy : 為什麼我做插入的時候提示沒有找到數據表呢?求教主題推薦android第三方應用數據結構資料庫通訊錄博文推薦網易研發工程師(移動端遊戲)—暑期實習生... spring事務心得積累關於傳遞參數時值變化的問題 關於Android NDK中調用第三方的...IIS管理器里添加虛擬目錄,提示: 「/... Android Recovery的漢化 ...計算中綴表達式的值 黑馬程序員_泛型簡介查看評論暫無評論您還沒有登錄請* 以上用戶言論只代表其個人觀點,不代表CSDN網站的觀點或立場【社區之星】孔德芳:如何才能提高Java Web性能? 4月推薦博文匯總 專訪朱燚:棄移動和互聯網應用戰場轉戰傳統應用的弄潮兒
推薦閱讀:

談談 Vue 業務組件
MFC寫COM組件(趁熱打鐵)
Joomla MVC 組件開發 (1)
手錶擺輪組件如何拆卸?
MMPickerView,可定製視圖組件

TAG:Android | 組件 |