查询
uri标识唯一的数据库:
content://com.example.app.provider/table1
解析成URI对象:
val uri = Uri.parse("content://com.example.app.provider/table1")
通过URI查询:
val cursor = contentResolver.query(
uri,
projection,
selection,
selectionArgs,
sortOrder)
得到的对象是一个Cursor对象,需要提取数据:
while (cursor.moveToNext()) {
val column1 = cursor.getString(cursor.getColumnIndex("column1"))
val column2 = cursor.getInt(cursor.getColumnIndex("column2"))
}
cursor.close()
插入
val values = contentValuesOf("column1" to "text", "column2" to 1)
contentResolver.insert(uri, values)
修改
val values = contentValuesOf("column1" to "")
contentResolver.update(uri, values, "column1 = ? and column2 = ?", arrayOf("text", "1"))
删除
contentResolver.delete(uri, "column2 = ?", arrayOf("1"))
创建自己的ContentResolver
方法:创建一个类去继承ContentResolver:
class MyProvider : ContentProvider() {
override fun onCreate(): Boolean {
return false // 完成数据库的创建和升级
}
override fun query(uri: Uri, projection: Array<String>?, selection: String?,
selectionArgs: Array<String>?, sortOrder: String?): Cursor? {
return null
}
override fun insert(uri: Uri, values: ContentValues?): Uri? {
return null
}
override fun update(uri: Uri, values: ContentValues?, selection: String?,
selectionArgs: Array<String>?): Int {
return 0
}
override fun delete(uri: Uri, selection: String?, selectionArgs: Array<String>?): Int {
return 0
}
override fun getType(uri: Uri): String? {
return null // 根据传入的内容URI返回相应的MIME类型
}
自定义设置查询范围
class MyProvider : ContentProvider() {
private val table1Dir = 0
private val table1Item = 1
private val table2Dir = 2
private val table2Item = 3
private val uriMatcher = UriMatcher(UriMatcher.NO_MATCH)
init {
uriMatcher.addURI("com.example.app.provider", "table1", table1Dir)
uriMatcher.addURI("com.example.app.provider ", "table1/#", table1Item)
uriMatcher.addURI("com.example.app.provider ", "table2", table2Dir)
uriMatcher.addURI("com.example.app.provider ", "table2/#", table2Item)
}
...
override fun query(uri: Uri, projection: Array<String>?, selection: String?,
selectionArgs: Array<String>?, sortOrder: String?): Cursor? {
when (uriMatcher.match(uri)) {
table1Dir -> {
// table1 查询
}
table1Item -> {
// table1 查询单条数据
}
table2Dir -> {
// table2
}
table2Item -> {
// table2
}
}
...
}