1

我读了很多关于这个问题的问题,但我找不到解决问题的正确方向,也许是因为我是菜鸟,迫切希望找到正确的方法......

据我所知,“requering already closed cursor”问题发生在 HoneyComb 因为startManagingCursor已被弃用。并且由于 HoneyComb 我们应该使用可以使用的CursorLoaderContentProvider我不使用也不想使用),并且发现有人编写了一个不使用的类CursorLoaderContentProvider这里

在我的应用程序中,我有一个 mySQLiteHelper 类,我有很多方法可以从中检索数据SQLite

    public Cursor listaBeneficios(String id) {
    String where = "proposta=?";
    String[] whereArgs = {id};
    String[] campos = {"pessoa"};
    Cursor c = db.query(TABLE_BENEFICIOS, campos, where, whereArgs, null, null, null, null);
    if (c.moveToFirst()) {
        return c;
    } else {
        return null;
    }
}

在我的 上Activity,我可以像这样读取数据:

    db = new repositorio(MainActivity.this);
    Cursor c = db.listaBeneficios(PROPOSTA);
    startManagingCursor(c);
    address.setText(c.getString(c.getColumnIndex("address")));
    db.close();

但我注意到,每次我点击后退按钮并返回 Activity A 时,它都会给出臭名昭著的“试图重新查询已经关闭的光标”。我已经尝试过 stopManagingCursor 和 close() 并且不使用 startManagingCursor。这让我发疯了。

是否有任何可用的简单使用示例CursorLoaders?如果我实施,我能否继续使用上面的方法(即上面的 listaBeneficios())CursorLoaders?这门课对我有帮助吗?我该如何实施?

任何帮助表示赞赏。

4

2 回答 2

1

CursorLoader 不起作用,因为它需要内容 URI。但是,您始终可以使用LoaderAsyncTaskLoader。这些类的文档包含如何使用它们的示例。

于 2012-12-07T01:30:32.763 回答
0

就我而言,我使用 managedQuery 从 ContentProvider 将光标返回到我的活动。我只是将调用更改为 getContentResolver().query 并解决了问题。

在 Eclipse 中执行 Control H 以换出您需要的所有更改。

于 2013-10-28T02:28:08.827 回答