我有一个自定义游标适配器,我想将游标的每一“行”传递回应用程序(通过正在运行的已注册回调)。
我知道我可以从光标读取每个字段并手动执行,但我只想将光标的“卡住克隆”传回。 (读取适配器中的字段需要我制作此类的多个专用版本。)
理想情况下,我想传回与 Cursor 具有相同接口(interface)的东西,但不能遍历结果集。
查询返回少于 20 行,因此空间不是问题。
最佳答案
我猜你有一个包含 20 行的游标,现在你想用只包含一行的游标调用一个方法 20 次。执行此操作的方法如下:
Cursor c = ...;// contains many rows
if(c.moveToFirst()){
String[] columns = c.getColumnNames();
while(!c.isAfterLast()){
MatrixCursor newCursor = new MatrixCursor(columns , 1);
MatrixCursor.RowBuilder b = newCursor.newRow();
for(String col: columns){
// in case all columns are of string type. But if they are
// different then see my comment below
b.add(c.getString(c.getColumnIndex(col)));
}
// invoke your listener here with newCursor
}
}
如果列的数据类型不是字符串怎么办?
For API>=11: 只需在for
循环中调用getType()
方法,并使用switch
语句调用适当的get 方法。
对于 API<11:运行另一个类似于此 PRAGMA table_info(my_table_name)
的查询,然后只需填充列名和类型的 Map
并在 for 循环中使用它.这是阅读此游标的方法 https://stackoverflow.com/a/9354401/1112882
关于android - 如何克隆或卡住 Android 数据库游标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19178319/