四大組件之ContentProvider

Content Provider 詳解

主要用於對外共享數據,也就是通過ContentProvider把應用中的數據共享給其他應用訪問,其他應用可以通過ContentProvider對指定應用中的數據進行操作。ContentProvider分爲系統的和自定義的,系統的也就是例如聯繫人,圖片等數據。

  android中對數據操作包含有:

  file, sqlite3,SharedPreferences , ContentResolver與ContentProvider前三種數據操作方式都只是針對本應用內數據,程序不能通過這三種方法去操作別的應用內的數據。

  android中提供ContectResolver與ContentProvider來操作別的應用程序的數據。

  使用方式:

  一個應用實現ContentProvider來提供內容給別的應用來操作,

  一個應用通過ContentResolver來操作別的應用數據,當然在自己的應用中也可以。

  以下這段是Google Doc中對ContentProvider的大致概述:

  內容提供者將一些特定的應用程序數據供給其它應用程序使用。內容提供者繼承於ContentProvider 基類,爲其它應用程序取用和存儲它管理的數據實現了一套標準方法。然而,應用程序並不直接調用這些方法,而是使用一個 ContentResolver 對象,調用它的方法作爲替代。ContentResolver可以與任意內容提供者進行會話,與其合作來對所有相關交互通訊進行管理。


1.ContentProvider

  Android提供了一些主要數據類型的ContentProvider,比如音頻、視頻、圖片和私人通訊錄等。可在android.provider包下面找到一些Android提供的ContentProvider。通過獲得這些ContentProvider可以查詢它們包含的數據,當然前提是已獲得適當的讀取權限。

  主要方法:

  public boolean onCreate() 在創建ContentProvider時調用
  public Cursor query(Uri, String[], String, String[], String) 用於查詢指定Uri的ContentProvider,返回一個Cursor

  public Uri insert(Uri, ContentValues) 用於添加數據到指定Uri的ContentProvider中

  public int update(Uri, ContentValues, String, String[]) 用於更新指定Uri的ContentProvider中的數據

  public int delete(Uri, String, String[]) 用於從指定Uri的ContentProvider中刪除數據

  public String getType(Uri) 用於返回指定的Uri中的數據的MIME類型

  *如果操作的數據屬於集合類型,那麼MIME類型字符串應該以vnd.android.cursor.dir/開頭。

  例如:要得到所有person記錄的Uri爲content://contacts/person,那麼返回的MIME類型字符串爲"vnd.android.cursor.dir/person"。

  *如果要操作的數據屬於非集合類型數據,那麼MIME類型字符串應該以vnd.android.cursor.item/開頭。

  例如:要得到id爲10的person記錄的Uri爲content://contacts/person/10,那麼返回的MIME類型字符串應爲"vnd.android.cursor.item/person"。

2.ContentResolver

  當外部應用需要對ContentProvider中的數據進行添加、刪除、修改和查詢操作時,可以使用ContentResolver類來完成,要獲取ContentResolver對象,可以使用Context提供的getContentResolver()方法。

  ContentResolver cr = getContentResolver();

  ContentResolver提供的方法和ContentProvider提供的方法對應的有以下幾個方法。

  public Uri insert(Uri uri, ContentValues values) 用於添加數據到指定Uri的ContentProvider中。

  public int delete(Uri uri, String selection, String[] selectionArgs) 用於從指定Uri的ContentProvider中刪除數據。

  public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) 用於更新指定Uri的ContentProvider中的數據。

  public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 用於查詢指定Uri的ContentProvider。



3.Uri

  Uri指定了將要操作的ContentProvider,其實可以把一個Uri看作是一個網址,我們把Uri分爲三部分。

  第一部分是"content://"。可以看作是網址中的"http://"。

  第二部分是主機名或authority,用於唯一標識這個ContentProvider,外部應用需要根據這個標識來找到它。可以看作是網址中的主機名,比如"blog.csdn.net"。

  第三部分是路徑名,用來表示將要操作的數據。可以看作網址中細分的內容路徑。

1.jpg
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章