contentprovider

 

這幾天的學習,都是Android很實用的地方.所以練習起來,特別的有精神.今天主要學習的是Android中,統一數據訪問的方式, 和一些爲了方便開發.由系統提供的一些實用的工具類.如:用於匹配Uri的UriMatcher和獲取Uri路徑後面ID的ContentUris.這在工作中一定會用到的,所以要認真的終結.

1.使用 ContentProvider共享數據
1)繼承 ContentProvider 並重寫方法
ContentProvider創建後就會被調用:public boolean onCreate()
供外部應用往ContentProvider添加數據:public Uri insert(Uri uri, ContentValues values)
供外部應用從ContentProvider刪除數據:public int delete(Uri uri, String selection, String[] selectionArgs)
供外部應用更新ContentProvider中的數據:public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
供外部應用從 ContentProvider中獲取數據:public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
返回當前Url所代表數據的MIME類型:public String getType(Uri uri)
2)在 AndroidManifest.xml 使用 <provider> 對該 ContentProvider 進行配置
<provider android:name=".PersonContentProvider" android:authorities="cn.itcast.provider.personprovider"/>
3)使用ContentResolver操作 ContentProvider中的數據
- 添加數據:public Uri insert(Uri uri, ContentValues values)
-刪除數據:public int delete(Uri uri, String selection, String[] selectionArgs)
-更新數據:public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
-獲取數據:public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
總結:
--ContentProvider共享數據是程序和程序之間通信用的.
--繼承ContentProvider類
--統一了數據訪問方式

2.Uri
Uri代表要操作的數據
content://cn.itcast.provider.personprovider/person/10
-scheme:content://
- 主機名或authority:cn.itcast.provider.personprovider
-路徑:/person/10
總結:
--Uri 主要包含了兩部分信息:需要操作的 ContentProvider,對ContentProvider中的什麼數據進行操作
--要操作 person 表中 id 爲 10 的記錄,可以構建這樣的路徑 :/person/10
--要操作 person 表中 id 爲 10 的記錄的 name 字段, person/10/name
--要操作 person 表中的所有記錄,可以構建這樣的路徑 :/person
--要操作 xxx 表中的記錄,可以構建這樣的路徑 :/xxx

3.UriMatcher
UriMatcher 類用於匹配Uri
UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
添加需要匹配uri,如果匹配就會返回匹配碼:sMatcher.addURI(“cn.itcast.provider.personprovider”, “person”, 1);//
sMatcher.addURI(“cn.itcast.provider.personprovider”, “person/#”, 2);
switch (sMatcher.match(Uri.parse("content://cn.itcast.provider.personprovider/person/10"))) {
   case 1
    break;
   case 2
    break;
   default:// 不匹配
    break;
}
總結:
--常量 UriMatcher.NO_MATCH 表示不匹配任何路徑的返回碼
--# 號爲通配符

4.ContentUris
ContentUris 類用於獲取Uri路徑後面的ID部分
1)爲路徑加上ID: withAppendedId(uri, id)
Uri uri = Uri.parse("content://cn.itcast.provider.personprovider/person")
Uri resultUri = ContentUris.withAppendedId(uri, 10);
--生成後的 Uri 爲: content://cn.itcast.provider.personprovider/person/10
2)從路徑中獲取ID: parseId(uri)
Uri uri = Uri.parse("content://cn.itcast.provider.personprovider/person/10")
long personid = ContentUris.parseId(uri);
--獲取的結果爲 :10

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