android - 如何克隆或卡住 Android 数据库游标

标签 android database sqlite cursor clone

我有一个自定义游标适配器,我想将游标的每一“行”传递回应用程序(通过正在运行的已注册回调)。

我知道我可以从光标读取每个字段并手动执行,但我只想将光标的“卡住克隆”传回。 (读取适配器中的字段需要我制作此类的多个专用版本。)

理想情况下,我想传回与 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/

相关文章:

android - IAB 助手。 queryInventoryAsync 未返回任何购买,但启动产品流程失败并显示 "Item Already Owned"

java - 如何重复我的背景图像但使用不同的图像

ruby - 如何将哈希保存到 Sequel DB?

mysql - 获取查询的列顺序

android - android何时以及如何初始化SIM卡信息

android - ImageView selectableItemBackgroundBorderless 不会在 View 边界之外呈现

php - 用mysql数据库和php制作内容 "feed",这是安全的方法吗?

MySQL 主/主复制仅以一种方式工作

android - Room - 如何通过迁移首次显式创建所有表?

java - Android:将简单的光标链接到 ListView