我读了很多关于这个问题的问题,但是我找不到正确的方向来解决我的问题,也许是因为我是noob,并且无法找到正确的方式......Android HoneyComb - 请求已关闭光标
据我了解,自从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. 我媒体链接试图stopManagingCursor和CL ose()并不使用startManagingCursor。 这让我疯狂。
是否有任何可用的简单例子使用CursorLoaders
? 如果我执行CursorLoaders
,我能继续使用上面的方法(即上面的listaBeneficios())吗? 这是class对我有帮助吗?我该如何执行它?
任何形式的帮助表示赞赏。
'startManagingCursor(c)'由于某种原因而被弃用了:) – zapl
哈哈我知道,但是我该如何解决这个问题?我能继续使用我现有的方法从cursorloader中检索数据吗?如果是的话,怎么样? –
最简单的方法是不使用管理游标方法。只需打开并关闭游标。否则,使用像你链接和加载器回调的装载器,如http://mobile.tutsplus.com/tutorials/android/android-sdk_loading-data_cursorloader/ – zapl