我读了很多关于这个问题的问题,但我找不到正确的方向来解决我的问题,也许是因为我是菜鸟,并且感到绝望,找不到正确的方法......
据我所知,自“HoneyComb”以来,“请求已关闭的游标”问题发生,因为startManagingCursor
已被弃用。从HoneyComb开始,我们应该使用与CursorLoader
一起使用的ContentProvider
(我不使用,我不想这样做),并发现有人写了一个类来使用CursorLoader
没有ContentProvider
(here)。
在我的应用程序中,我有一个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();
但是我注意到每当我点击后退按钮并返回活动A时,它就会给臭名昭着的“试图重新查询已经关闭的游标”。 我已经尝试停止ManagingCursor和close()而不是使用startManagingCursor。 这让我疯了。
是否有使用CursorLoaders
的简单示例?
如果我实现CursorLoaders
,我能继续使用上面的方法(即上面的listaBeneficios())吗?
这class对我有帮助吗?我该如何实现呢?
感谢任何帮助。
答案 0 :(得分:1)
CursorLoader不起作用,因为它需要内容URI。但是,您始终可以使用Loader或AsyncTaskLoader。这些类的documentation包含如何使用它们的示例。
答案 1 :(得分:0)
在我的情况下,我使用managedQuery将光标从ContentProvider返回到我的活动。我只是将调用更改为getContentResolver()。查询和问题已解决。
在Eclipse中执行Control H以替换所需的所有更改。