通过ContentResolver获取其他程序数据
调用Context类中的方法getContentResolver()获取ContentResolver对象进行增删改查
区别于SQLiteDatabase所需要的参数表名,采用URI对象进行资源的定位
查
Cursor cursor = getContentResolver().query(
uri,
projection,
selection,
selectionArgs,
sortOrder);
//通过返回的Cursor对象进行读取处理
if (cursor != null) {
while (cursor.moveToNext()) {
String column1 = cursor.getString(cursor.getColumnIndex("column1"));
int column2 = cursor.getInt(cursor.getColumnIndex("column2"));
}
cursor.close();
}
删
getContentResolver().delete(uri, "column2 = ?", new String[] { "1" });
改
ContentValues values = new ContentValues();
values.put("column1", "");
getContentResolver().update(uri, values, "column1 = ? and column2 = ?", new
String[] {"text", "1"});
增
ContentValues values = new ContentValues();
values.put("column1", "text");
values.put("column2", 1);
getContentResolver().insert(uri, values);
继承ContentProvider实现本程序供其他程序数据访问接口
重写ContentProvider中的6个方法
- onCreate()
初始化内容提供器的时候调用。通常会在这里完成对数据库的创建和升级等操作,返回 true
表示内容提供器初始化成功,返回 false 则表示失败。 - query()
从内容提供器中查询数据。使用 uri 参数来确定查询哪张表,projection 参数用于确定查
询哪些列,selection 和 selectionArgs 参数用于约束查询哪些行,sortOrder 参数用于对结
果进行排序,查询的结果存放在 Cursor 对象中返回。 - insert()
向内容提供器中添加一条数据。使用 uri 参数来确定要添加到的表,待添加的数据保存在
values 参数中。添加完成后,返回一个用于表示这条新记录的 URI。 - update()
更新内容提供器中已有的数据。使用 uri 参数来确定更新哪一张表中的数据,新数据保存在
values 参数中,selection 和 selectionArgs 参数用于约束更新哪些行,受影响的行数将作
为返回值返回。 - delete()
从内容提供器中删除数据。使用 uri 参数来确定删除哪一张表中的数据,selection 和
selectionArgs 参数用于约束删除哪些行,被删除的行数将作为返回值返回。 - getType()
根据传入的内容 URI 来返回相应的 MIME 类型。
重要成分
静态代码块
uriMatcher用于传送URI的判断,判断出到底是需要什么数据,并返回设定的类型码
MIME
是getType()方法返回的类型
-
必须以 vnd 开头。
-
如果内容 URI 以路径结尾,则后接 android.cursor.dir/,如果内容 URI 以 id 结尾,
则后接 android.cursor.item/。 -
最后接上 vnd..
。
例:content://com.example.app.provider/table1的MIME类型为
vnd.android.cursor.dir/vnd.com.example.app.provider.table1例:content://com.example.app.provider/table1/1的MIME类型为
vnd.android.cursor.item/vnd.com.example.app.provider.table1