如何克隆或冻结Android数据库游标

fad*_*bee 2 database sqlite android clone cursor

我有一个自定义游标适配器,我想将光标的每个"行"传递回应用程序(通过一个正在工作的注册回调).

我知道我可以从光标读取每个字段并手动完成,但我只想将光标的"冻结克隆"传回.(读取适配器中的字段需要我制作此类的几个专用版本.)

理想情况下,我想传回与Cursor相同的接口,但无法遍历结果集.

查询返回的行少于20行,因此空间不是问题.

M-W*_*eEh 8

我猜你有一个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
    }
}
Run Code Online (Sandbox Code Playgroud)

如果列的数据类型不是String,该怎么办?

对于API> = 11:只需getType()for循环中调用方法并使用switchstatement来调用适当的get方法.

对于API <11:运行与此类似的另一个查询PRAGMA table_info(my_table_name),然后只填充Map列名称并键入并在for循环中使用它.以下是您可以阅读此游标的方法/sf/answers/654808101/