`

Mars视频笔记——ContentProvider

阅读更多

 

本来想好好整理格式什么的 后来有点问题只好算了 直接复制了 也没整理格式。。主要方便自己随便哪里都可以看到 到时候再回想 

 

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)

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics