本来想好好整理格式什么的 后来有点问题只好算了 直接复制了 也没整理格式。。主要方便自己随便哪里都可以看到 到时候再回想
ContentProvider初步
1 ContentProvider基本概念
为存储和获取数据提供了统一的接口
可以在不同应用程序之间共享数据
Android为常见的一些数据提供了ContentProvider(音频 图片 通信录等等)
ContentProvider使用表的形式来组织数据
ContentProvider所提供的函数
query inset update delete getType onCreate
2 Uri 统一资源标识符
每个ContentProvider都拥有一个公共的URI,用于表示这个ContentProvider所提供的数据
Android所提供的ContentProvider都存放在android.provider包中
3 ContentProvider的实现方法
(自己实现一个并不常见 使用内置较多)
1 定义一个CONTENT_URI常量
public static final Uri CONTENT_URI=Uri.parse("content://com.example.abc(AUTHORITY变量)/a/b");一般用类名等
定义常量 列名 必须有_ID(INTEGER PRIMARY KEY AUTOINCREMENT 如果使用sqllite3的话 type)
数据类型通过CONTENT_TYPE和CONTENT_TYPE_ITEM确定
CONTENT_TYPE vnd.android.cursor.dir(代表整张表)/vnd.namename
CONTENT_TYPE_ITEM vnd.android.cursor.item(某一条)/vnd.namename
表的结构可以通过implementBaseColumns来达到目的
2 定义一个类,继承ContentProvider
UriMatcher 用于匹配URI
uriMatcher.addURI("AUTHORITY变量","路径/#(id)",匹配常量)
userProjectionMap 一个<String,String>的HashMap
userProjectionMap.put(列名,列名的别名)
3 实现query insert update delete onCreate getType等方法
getType方法 根据传入的URI 返回该URI所表示的数据类型
eg:
switch(uriMatcher.match(uri)){
case 匹配常量1:
return 数据类型(CONTENT_TYPE)
case 匹配常量2:
return 数据类型2(CONTENT_TYPE_ITEM)
}
实现insert(Uri uri,ContentValue values)方法
eg:
通过sqllite操作
返回值为代表刚刚插入数据的Uri
实现onCreate方法
eg:
dh=new DatabaseHelper(getContext(),数据库名);
return true;
实现query方法
eg:
用到SQLiteQueryBuiler对象
qb.setTables(表名)
qb.setProjectionMap (之前创建的HashMap别名彪)
对单条 qb.appendWhere()
4 在AndroidManifest.xml中声明
<provider android:name="包名+类名"
android:authorities="包名+类名" /> 这里的authorities一定要与定义的常量一致
使用自定义ContentProvider
new ContentValues()存放要存入的值
uri=getContentResolver().inset(要插入的uri,contentValues)