安卓四大組件之 content provider
用途
跨程序共享數據(爲其他應用程序提供訪問數據的接口)
利用Content Provider對數據進行封裝,有利於脫離對數據庫的依賴性(解耦)。改變底層數據庫,而上層數據查詢不用改變。
什麼是Content Provider?
使用安卓存儲有五種方式,分別是
- 文件
- 網絡存儲
- 數據庫
- content provider
- sharedpreference
其中content provider 是安卓四大組件之一,按照英文翻譯理解爲,內容提供者。顧名思義,就是讓內容提供給別的應用程序 ,即跨應用提供數據的統一接口。
直接上英文,權威一點。
Content providers manage access to a structured set of data. They encapsulate the data, and provide mechanisms for defining data security. Content providers are the standard interface that connects data in one process with code running in another process.
官方是這麼解釋的,翻譯過來就是,Content provider管理android以結構化方式存放的數據。他以相對安全的方式封裝數據並且提供簡易的處理機制。Content provider提供不同進程間數據交互的標準化接口。
既然是對數據進行操作,所以增刪查改必不可少的。
下面我們演示一個簡單的demo
首先是創建一個ContentPro類繼承自content provider類
public class ContentPro extends ContentProvider {
@Override
public boolean onCreate() {
return false;
}
@Nullable
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] strings, @Nullable String s, @Nullable String[] strings1, @Nullable String s1) {
return null;
}
@Nullable
@Override
public String getType(@NonNull Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues contentValues) {
return null;
}
@Override
public int delete(@NonNull Uri uri, @Nullable String s, @Nullable String[] strings) {
return 0;
}
@Override
public int update(@NonNull Uri uri, @Nullable ContentValues contentValues, @Nullable String s, @Nullable String[] strings) {
return 0;
}
}
繼承了類之後要對應的要實現8個方法。分別是
也就是代碼中提到的方法。
然後使用它之前和其它組件一樣,必須在Manifest清單文件裏面進行聲明。
<provider
android:authorities="com.example.does.myapplication.ContentPro"
android:name=".ContentPro">
</provider>
其中authorities這個屬性我們可以這樣理解爲它的身份證。爲了保證統一性,我們命名的方式是使用包名。
使用到的類
Content Resolver
解析器,用來訪問content provider類Content Provider
內容提供者,用來給其它程序提供數據,主要提供對外訪問的接口Uri
用來區分應用程序,字段的url,分爲三部分Uri.Builder
用來連綴構建標準Uri的類ContentUris
用來給Uri追加id和讀取Uri中的id的幫助類UriMatcher
Content Provider用來處理(匹配)不同Uri的類,創建Content Provider的時候就依靠UriMatcher進行匹配從而確定對不同的Uri請求進行不同的操作,有以下兩個Uri的MIME類型
如何使用?
數據都是uri的形式向外公開的。
我作爲新手,水平有限,就簡單介紹一下,content provider規定數據形式的uri組成。
有三個部分,分別是
scheme
這是google規定的,scheme是 content://主機名(Authorities)
這個就是我們在清單文件裏面聲明的,相當於身份證,比如這裏的com.example.does.myapplication.ContentPro,外部調用可以根據這個標識來找到它。
- path
路徑(Path)可以用來表示我們要操作的數據,路徑的構建根據業務而定。