首先我对ContentProvider(内容提供者),知道的太少太少,因为使用也非常少,所以,接触的少,自然就不了解了,这篇文章只是一个学习的过程吧。
基本介绍:
ContentProvider在Android中的作用是对外共享数据,也就是说可以通过ContentProvider把应用中的数据共享给其他应用访问,它还提供了一套完整的机制,允许一个程序,访问另一个程序中的数据,重要的是能保证被访数据的安全性,目前,使用内容提供者是Android实现夸程序共享数据的标准方式。
不同于文件存储和SharedPreferences存储中的两种 全局可读写操作模式,内容提供者可以选择只对哪一部分数据进行共享,从而保证我们程序中的隐私数据不会有泄漏的危险。
URI
这里为什么要介绍Uri呢?
因为ContentProvider对外共享数据统一了数据的访问放式,它实际上是对SQLiteOpenHelper的进一步封装,通过URI映射来判断需要操作的数据库中的哪张表,并进行增、删、改、查。URI的用处就是描述路径。
首先URI的格式如下图所示:
schema:
由Android固定设置为"content://“。
authority:
用于唯一标识这个ContentProvider,外部调用者可以通过这个标识找到它。一般为程序包名,例如:
com.example.nana.test
path:
要操作的数据库表。每个应用都会有多张表,path就是用于选择表的,如test表,“/test”。
id:
每张表中都对有许多数据,我们可以通过id选择我们需要的那几列,也可以不填,直接获取整张表的数据。
标准的URI写法
将每一部分组合起来就是标准写法了,
"content://com.example.nana.test/test/5"
基本使用
大概了解了URI之后,就可以使用了,我们得到的是一个URI字符串,我们需要将它解析成Uri对象:
Uri uri=Uri.parse("content://com.example.nana.test/test/5");
我们只需调用Uri.parse()方法就可以将内容URI转换成Uri对象了。
查询
Cursor cursor=getContentResolver().query(
uri,
projection,
selection,
selectionArgs,
sortOrder
);
查询完成后返回的是一个Cursor对象,我们可以通过遍历将获取到的数据取出,
if(cursor!=null){
while (cursor.moveToNext()) {
String column1 = cursor.getString(cursor.getColumnIndex("column1"));
}
cursor.close();
}
增加
ContentValues values=new ContentValues();
values.put("column1","text");
values.put("column2",1);
getContentResolver().insert(uri,values);
熟悉SQLite后会发现两者非常像,都是把数据封装在起来,再进行传递。非常简单,没什么好说的。
更新(修改)
update(Uri,values,selection,selectionArgs);
这几个参数都比较熟悉,第一个标识Uri对象,values表示ContentValues对象,需要更新的数据放进去即可,后面两个参数是约束用的,和上面表中的描述一样。下面的例子是将column1中的数据改为空。
ContentValues values=new ContentValues();
values.put("column1","");
getContentResolver().update(uri,values,"column1 = ? and column2 = ?",new String[]{"text","1"});
删除
delete(Uri,selection,selectionArgs);很简单,只需要传入Uri对象以及约束条件即可。
getContentResolver().delete(uri, "cloumn2 = ?",new String[]{"1"});
以上就是ContentReslver的增删改查了。
剩下的回去再写了。。。。。