安卓四大组件之ContentProvider(内容提供者)

        首先我对ContentProvider(内容提供者),知道的太少太少,因为使用也非常少,所以,接触的少,自然就不了解了,这篇文章只是一个学习的过程吧。

基本介绍:

ContentProvider在Android中的作用是对外共享数据,也就是说可以通过ContentProvider把应用中的数据共享给其他应用访问,它还提供了一套完整的机制,允许一个程序,访问另一个程序中的数据,重要的是能保证被访数据的安全性,目前,使用内容提供者是Android实现夸程序共享数据的标准方式。

不同于文件存储和SharedPreferences存储中的两种    全局可读写操作模式,内容提供者可以选择只对哪一部分数据进行共享,从而保证我们程序中的隐私数据不会有泄漏的危险。


URI

这里为什么要介绍Uri呢?

因为ContentProvider对外共享数据统一了数据的访问放式,它实际上是对SQLiteOpenHelper的进一步封装,通过URI映射来判断需要操作的数据库中的哪张表,并进行增、删、改、查。URI的用处就是描述路径。

首先URI的格式如下图所示:

安卓四大组件之ContentProvider(内容提供者)

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
        );

安卓四大组件之ContentProvider(内容提供者)

查询完成后返回的是一个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的增删改查了。

剩下的回去再写了。。。。。