使用场景
- 存储和读取数据提供了统一的接口
- 应用程序实现数据共享
操作方式都是通过Uri来实现的
Uri的组成部分:
- 第一部分是"content://"
- 第二部分是主机名或authority,用于唯一标识这个ContentProvider。
- 第三部分是路径名,用来表示将要操作的数据。
如:[content://][contacts][/person/10]
常用工具
- UriMatcher
用来匹配Uri的信息,默认UriMatcher.NO_MATCH
增加需要匹配的Uri
void addURI(String authority, String path, int code)
-
path 匹配的路径
/xxx 匹配目录
/xxx/# 匹配Id(数字)
/xxx/* 匹配Id(文本)
其他值的为精确匹配 -
code 匹配的类型
-
ContentUris
用来操作Uri
生成带Id的uri
public static Uri withAppendedId(Uri contentUri, long id)
从Uri中读取id
public static long parseId(Uri contentUri)
创建Provider
继承ContentProvider根据需要覆写其方法
- onCreate
初始化 - getType
根绝Uri来返回处理类型
vnd.android.cursor.dir/xxx 多条数据
vnd.android.cursor.item/xxx 单条数据 - insert
- delete
- update
- query
声明
在AndroidManifest.xml中注册<provider/>组件
- name 组件类
- authorities 指明“主机名”
- exported 如果共享数据还需要设置暴露
使用Provider
获取ContentResolver
Context.getContentResolver
ContentResolver支持增删改查
- 新增数据
Uri insert(Uri url,ContentValues values)
int bulkInsert(Uri url,ContentValues[] values)
- 删除数据
int delete(Uri url, String where,String[] selectionArgs)
- 修改数据
int update(Uri uri,ContentValues values,String where, String[] selectionArgs)
- 查询数据
Cursor query(Uri uri,String[] projection,String selection,String[] selectionArgs, String sortOrder)
网友评论