《第一行代码》阅读笔记(二十六)——内容提供器

——第一行代码
内容提供器( Content Provider )主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访数据的安全性。目前,使用内容提供器是Android实现跨程序共享数据的标准方式。

内容提供器的用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序中的数据,另一种是创建自己的内容提供器给我们程序的数据提供外部访问接口。那么接下来我们就一个一个开始学习吧,首先从使用现有的内容提供器开始。

ContentResolver的基本用法

从书中介绍,很大程度和SQLiteDataBase一样,insert()方法用于添加数据,update()方法用于更新数据,delete()方法用于删除数据,query() 方法用于查询数据。但是参数不同,在这里不接收表名,而是一个uri地址。

uri主要由两部分组成:authority和path。authority是用于对不同的应用程序做区分的,一般为了避免冲突,都会采用程序包名的方式来进行命名。比如某个程序的包名是com.example.app,那么该程序对应的authority就可以命名为com.example.app. provider。path则是用于对同一应用程序中不同的表做区分的,通常都会添加到authority的后面。比如某个程序的数据库里存在两张表: table1和table2,这时就可以将path分别命名/table1和/table2,然后把authority和path进行组合,再在字符串的头部加上协议声明。
因此,内容URI最标准的格式写法如下:
content:/ /com.example.app.provider/table1
content:/ /com.example.app.provider/table2

再调用Uri.parse()方法,就可以将内容URI字符串解析成Uri对象了。

获得了Uri对象就可以使用query()的方式查询了。

Uri uri = Uri.parse(" content://com.example.app.provider/table1");
        Cursor cursor = getContentResolver().query (
                uri,
                projection,
                selection,
                selectionArgs,
                sortOrder) ;    

增:

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

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

读取联系人Demo

其实这个内容提供器的使用并不是非常频繁,所以这里的项目大家可以看看书上怎么说。郭神的语言功底还是十分厉害的,讲解知识通俗易懂。

原文地址:https://www.cnblogs.com/zllk/p/13416354.html