使用原因
Android官方推荐使用ContentProvider技术来将程序中的数据共享给其他程序。(实际使用较少,主要是面试学习)
组成部分
- 内容提供者:ContentProvider
提供数据,并重写其中的增删改查方法,提供所需数据。
- 内容接收者:ContentResolver
处理数据,可以调用类似数据库的增删改查方法,实现数据获取。
- 内容观察者:ContentObserver
观察ContentProvider数据变化,并通知ContentResolver。
(图片来源:41.0-ContentProvider理论知识_哔哩哔哩_bilibili)
ContentResolver的基本用法
1. Uri对象
Uri对象类似于SQL中的操作对象的表名,有了Uri对象就可以实现类似SQL的增删改查操作了。
2. 查询query
val cursor = contentResolver.query(
uri,
projection,
selection,
selectionArgs,
sortOrder)
上述的参数与SQL的对应关系如下表所示。(表来源:《第一行代码》郭霖)
然后就可以通过下述代码来获取数据:
while (cursor.moveToNext()) {
val column1 = cursor.getString(cursor.getColumnIndex("column1"))
val column2 = cursor.getInt(cursor.getColumnIndex("column2"))
}
cursor.close()
3. 增加insert
val values = contentValuesOf("column1" to "text", "column2" to 1)
contentResolver.insert(uri, values)
4. 修改update
val values = contentValuesOf("column1" to "")
contentResolver.update(uri, values, "column1 = ? and column2 = ?", arrayOf("text", "1"))
5. 删除delete
contentResolver.delete(uri, "column2 = ?", arrayOf("1"))
TODO:学习的内容较少,更多更难的部分(如自定义ContentProvider)还没有学习,考虑后续更新