1

我读了很多关于这个问题的问题,但是我找不到正确的方向来解决我的问题,也许是因为我是noob,并且无法找到正确的方式......Android HoneyComb - 请求已关闭光标

据我了解,自从HoneyComb以来,“请求已经关闭的游标”问题发生了,因为startManagingCursor已被弃用。由于HoneyComb我们应该使用CursorLoaderContentProvider(我不使用,我不想)一起工作,并发现有人写了一个类,使用CursorLoader没有ContentProviderhere)。

在我的申请,我有一个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对我有帮助吗?我该如何执行它?

任何形式的帮助表示赞赏。

+0

'startManagingCursor(c)'由于某种原因而被弃用了:) – zapl

+0

哈哈我知道,但是我该如何解决这个问题?我能继续使用我现有的方法从cursorloader中检索数据吗?如果是的话,怎么样? –

+0

最简单的方法是不使用管理游标方法。只需打开并关闭游标。否则,使用像你链接和加载器回调的装载器,如http://mobile.tutsplus.com/tutorials/android/android-sdk_loading-data_cursorloader/ – zapl

回答

1

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

0

在我的情况下,我使用managedQuery从内容提供者返回一个游标到我的活动。我只是将调用改为getContentResolver()。查询并解决了问题。

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