前言
正文
一、简介
关于 ContentProvider (内容提供者)一般有两种用法,一种是根据现有的内容提供者来读取和操作对应程序中的数据,另外一种是创建自己的内容提供者给我们的程序中的数据提供外部的访问接口。
在一般的开发中,用的比较多的是第一种,即根据现有的内容提供者来读取和操作对应程序中的数据,比如说,读取 Android 系统中自带的联系人、短信、媒体库等数据。而要操作这些数据需要一个类:ContentResolver (内容解析者)
关于第二种用法,我们就需要用到 ContentProvider 类,下边会逐渐介绍
二、ContentResolver 的简单用法
2.1 获取 ContentResolver 的实例
//需要通过 Context 来获取
ContentResolver contentResolver = context.getContentResolver();
2.2 一系列操作数据的方法
- 查询数据:contentResolver.query();
- 插入数据:contentResolver.insert();
- 更新数据:contentResolver.update();
- 删除数据:contentResolver.delete();
2.3 与 SQLiteDatabase 的区别
ContentResolver 中增删改查的方法都不接受表名参数,而是使用一个 Uri 参数代替,这个参数被称为内容 URI ,它是唯一的标识符,主要组成部分如下所示:
协议声明:content:// 这是固定写法
authority:用于区分不同的程序,一般为包名: io.github.adsuper.mvpapp
path: 用于区分同一应用程序中的不同表名,如:table1
Id: 用于区分同一表中的不同数据,不过这个不常用,一般指定到表就行了