在一些使用 Cursor 的场景里,如果想得到一个 Cursor 对象,但又没有数据库返回一个 Cursor,此时可以通过 MatrixCursor 来返回一个伪造的 Cursor。比如一个程序在一般情况下用 context.getContentResolver().query() 从 ContentProvider 中查询数据,但是在一些特殊的场景里,需要返回的只有几条固定的已知记录,不需要从数据库查询,此时可以使用 MatrixCursor 来根据这些已知的记录构造一个 Cursor。
MatrixCursor 的用法如下:
- 首先创建一个字符数组,字符数组的值对应着表的字段:
val COLUMN_NAME = arrayOf(“_id”, “name”, “age”)
- 利用MatrixCursor的构造方法,构造一个MatrixCursor,传入的参数即是步骤1中创建的字段数组:
matrixCursor = MatrixCursor(COLUMN_NAME)
- 通过matrixCursor的addRow方法添加一行值,相当于向数据库中插入一条记录:
matrixCursor?.addRow(arrayOf(1, “hearing”, 24))
// 也可以通过构造一个MatrixCursor.RowBuilder来实现
matrixCursor?.newRow()?.add(2)?.add(“hhh”)?.add(22)
通过上面三步即可完成 MatrixCursor 的构造,从 MatrixCursor 中取出数据的过程与 Cursor 相同。
接下来通过一个实例来看看怎么具体地借助 ContentProvider 和 Binder 来进行便捷的跨