我读了很多关于这个问题的问题,但我找不到解决问题的正确方向,也许是因为我是菜鸟,迫切希望找到正确的方法......
据我所知,“requering already closed cursor”问题发生在 HoneyComb 因为startManagingCursor
已被弃用。并且由于 HoneyComb 我们应该使用可以使用的CursorLoader
(ContentProvider
我不使用也不想使用),并且发现有人编写了一个不使用的类CursorLoader
(ContentProvider
这里)。
在我的应用程序中,我有一个 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
?这门课对我有帮助吗?我该如何实施?
任何帮助表示赞赏。