Android筆記(五十四) Android四大組件之一——ContentProvider(一)

來源:互聯網
上載者:User

標籤:

ContentProvider提供資料

         在Android中,他的每個應用都是相互獨立的,各自運行在自己的Dalvik虛擬機器中,但現實使用中常常需要在多個應用之間進行資料交換,例如發簡訊需要擷取連絡人中的內容,QQ上傳頭像需要擷取相簿內容等等,Android為這種跨應用的資料交換提供了一個標準ContentProvider,使用者實現自己的ContentProvider時,需要實現他規定的抽象方法:

         public boolean onCreate():該方法在ContentProvider建立後會被調用,當其他應用第一次訪問ContentProvider時,該ContentProvider會被建立出來,並立即回調該onCreate()方法。

         public Uri inert(Uri uri,ContentValues values):根據該Uri插入values對應的資料。

         public int delete(Uri uri,String selection,String[] selectionArgs):根據Uri刪除select條件所匹配的全部記錄。

         public int update(Uri uri,ContentValues values ,String selection,String[] selectionArgs):根據Uri修改select條件所匹配的全部記錄

         public Cursor query(Uri uri ,String[] projection,String selection ,String[] selectionArgs,String sortOrder):根據Uri查詢出select條件所匹配的全部記錄,其中projection就是列明列表,表明只選擇出指定的資料列。

         public String getTypt(Uri uri)該方法用於返回當前Uri所代表的資料的MIME類型,如果該Uri對應資料可能包括多條資料,那麼MIME類型字串應該以vnd.android.cursor.dir/開頭,如果該Uri對應的資料只包含一條記錄,那麼返回MIME類型字串應該以vnd.android.cursor.item/開頭。

什麼是URI

         上面每個方法都有一個Uri參數,那麼Uri又是什麼呢?

         關於Uri的可以參考這兩篇博文  http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html

         http://www.cnblogs.com/hust-ghtao/p/4724885.html

         就以上面兩個網址來說:

         http://這個是URL的協議部分,只要通過http協議來訪問網站,前面都是這個首碼。

         www.cnblogs.com這個是網域名稱,訪問指定的網站,網域名稱部分也是不變的

         gaojing/archive/2012/02/04/2413626.htmlhust-ghtao/p/4724885.html這個就是網站資源部分,這個是動態改編的,訪問者訪問不同的資源,這個部分也會不同。

         ContentProvider要求的Uri和URL類似,例如

         content://org.crazyit.providers.dictprovider/words

         content://這個是android的contentprovider規定的,就像http://一樣,提供ContentProvider和訪問ContentProvider的預設協議就是content://

         org.crazyit.providers.dictprovider這個類似於網址,系統通過這個名字找到你要操作哪個ContentProvider。

         words這個是資源部分,訪問者訪問不同的資源時候,這裡也是動態改變的。

         可以使用Uri的靜態方法parse()將字串轉換成一個Uri。

ContentResolver訪問使用

         通常與ContentProvider結合使用的是ContentResolver,一個應用程式使用ContentProvider提供資料,另外一個應用程式使用ContentResolver來訪問資料。

         可以使用Context的getContentResolver()方法來擷取ContentProvider對象

         獲得了ContentResolver對象之後,可以使用如下方法操作資料:

         insert(Uri uri,ContentValues values):向Uri對應的ContentProvider中插入values對應的資料。

         delete(Uri uri,String where,String[] selectionArgs):刪除Uri對應的ContentProvider中where提交匹配的資料。

         update(Uri uri,ContentValues values,String where ,String[] selectionArgs):更新Uri對應的ContentProvider中where提交匹配的資料。

         query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder):查詢Uri對應的ContentProvider中where提交匹配的資料。

         一般來說,ContentProvider是單例模式,當多個應用程式通過ContentResolver來操作ContentProvider提供的資料時,ContentResolver調用的資料操作將會委託給同一個ContentProvider處理。

註冊ContentProvider

         在定義好ContentProvider之後,還需要在系統中註冊這個ContentProvider,具體操作方法是在AndroidMainifest.xml檔案中添加一個<provider>元素,需要注意的是,我們要設定這個元素的exported的值為true,表明這個ContentProvider可以向外部應用提供資料

Android筆記(五十四) Android四大組件之一——ContentProvider(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.