ContentProvider跨程序共享数据(一)

##简介##
用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序的数据,同时保证被访数据的安全性,使用ContentProvider是Android实现跨程序共享数据的标准方式。不同于文件存储和SharedPreferences,ContentProvider可以选择只对哪一部分数据进行共享。


##ContentProvider用法##

  • 使用现有的ContentProvider来读取和操作相应程序中的数据。

  • 创建自己的ContentProvider给我们的程序的数据提供外部访问接口。


##ContentResolver用法##
对于每一个应用程序来说,如果想要访问ContentProvider中共享的数据,就一定要借助ContentResolver类,可以通过Content中的getContentResolver()方法获取到改类的实例。ContentResolver提供了一系列的方法用于对数据进行CRUD操作。

  • insert()插入

  • update()更新

  • delete()删除

  • query()查询

不同于SqLiteDatabase,ContentResolver中的增删改查不接收表名参数,而是使用一个Uri参数代替,这个参数被称为内容URI。内容URI给ContentProvider中的数据建立了唯一标识符,主要由两部分组成:authoritypath

  • authority:用于对不同的应用程序做区分的,一般会采用程序包名进行命名。比如某个程序的包名是com.example.app,那么该程序的authority可以命名为:com.example.app.provider。

  • path:则是用于对同一应用程序中不同的表做区分的,通常添加到authority后面,比如某个程序的数据库有2张表,table1和table2,path分别命名为/table1和/table2,然后把authority和path进行组合,内容URI就变成了com.example.app.provider/table1和com.example.app.provider/table2,

最后在头部加上协议声明就可以了。

content://com.example.app.provider/table1
content://com.example.app.provider/table2

在得到了内容URI字符串后,需要将他解析成Uri对象才可以作为参数传入。

Uri uri=Uri.parse("content://com.example.app.provider/table1");

##查询##

现在就可以使用这个Uri对象来查询table1表中的数据了。

Cursor cursor=getContentResolver().query(
	uri,
	projection,
	selection,
	selectionArgs,
	sortOrder);

这些参数和SQLiteDatabase中query()方法里的参数很像。

query()参数对应SQL部分描述
urifrom table_name指定查询某个应用程序下的某一张表
projectionselect column1,column2指定查询的列名
selectionwhere column=value指定where的约束条件
selectionArgs-为where中的占位符提供具体的值
sortOrderorder by column1,column2指定查询结果的排序方式
查询完成后返回的是一个Cursor对象。读取的思路是通过移动游标的位置来遍历Cursor的所有行,然后取出相应列的数据
if(cursor!=null){
	while(cursor.moveToNext()){
		String column1=cursor.getString(cursor.getColumnIndex("column1"));
		int column2=cursor.getInt(cursor.getColumnIndex("column2"));
	}
	cursor.close();
}

##添加##

ContentValues values=new ContentValues();
values.put("column1","text");
values.put("column2",1);
getContentResolver().insert(uri,values);

##更新##
把column1的值清空

ContentValues values=new ContentValues();
values.put("column1"," ");
getContentResolver().update(uri,values,"column1=? and column2=?",new String[]{"text",1});

##删除##

getContentResolver().delete(uri,"column2=?",new String[]{"1"});

第一部分已完结,点击第二部分->ContentProvider跨程序共享数据(二)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值