標籤:contentprovider以及url
ContentProvider作為四大組件之一,那它存在一定是有原因的? 那為什麼引用ContentProvider呢? 我們先看一個例子。
大家在生活中用手機,比如你按了360手機管家, 其中360手機管家就有一個簡訊,通話記錄,連絡人備份的功能。那手機裡的簡訊,連絡人都是存放在資料庫中的
比如連絡人的資訊是存放在contacts2.db中。既然資料是存放在資料庫中的,那360手機管家就必須拿到這個資料。但是contac2.db對別的使用者是沒有許可權的。那360是如何拿到手機連絡人這些資訊呢?
這時候Android系統就引入了ContentProvider。既然第三方程式不能直接操作資料庫裡的資料,但是第三方可以通過ContentProvider提供的介面去操作資料。所以說ContentProvider的作用就是:就是在不同應用程式之間實現資料的共用。就比如說連絡人程式,想把自己的資料共用給別人,但是又不能讓別人直接操作,所以連絡人程式就通過ContentProvider將自己的資料暴露出來。但是第三方程式想獲得該資料,就得必須通過ContentResolver去獲得該資料。
那既然訪問資料必須通過ContentResolver去訪問ContentProvider暴露出來的資料,那ContentResolver是如何知道資料在那裡存放的呢?前提是ContentProvider得告訴資料在那裡,你去那裡取。 這時候及引入另一個人概念Url。
提起URL,大家可能第一想法就是互連網上的URL(統一資源定位器)。此URL是互連網上的URL,而在Android系統中url代表的也是一個地址。但是兩者是有區別的:
比如就以百度首頁的圖片網址為例:
對比看看我們Android中的URL:
既然知道URL是幹什麼的,那接下來學習URL的一些常用的方法:
1: 將一個字串轉化為URL
Uri uri = Uri.parse("contengt://com.demo.contentprovider/user/1");
2:為url路徑加上ID部分
Uri uri = Uri.parse("content://com.demo.contentprovider/user");Uri resUri = ContentUris.withAppendedId(uri, 1);/*產生後的uri為: content://com.demo.contentprovider/user/1 */
3:匹配此URl是否合法
/*構造方法的預設值是返回-1, 代表時不匹配返回-1*/UriMatcher matcher = new UriMatcher(-1);/*如果匹配為:content://com.demo.contentprovider/user, 就返回為1*/matcher.addURI("com.demo.contentprovider", "user", 1);/*如果匹配為:content://com.demo.contentprovider/user/2, 就返回為2*/matcher.addURI("com.demo.contentprovider", "user/#", 2);//#代表萬用字元
今天關於ContentProvider以及URL的知識就說到這裡
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Android 四大組件學習之ContentProvider一