没有事先close()Android的游标最终确定

在我的应用程序中,我有一个listview。 我通过SQLiteDatabase中的查询获取数据。 当我从db获取数据时,我收到此错误: 错误

当我从第20行到第21行时发生。 发生

我尝试将cursor.deactivate()和cursor.close()放在regel 50上。但没有结果。 任何人都知道我为什么会得到这个错误以及如何解决它? 谢谢 :)

Solutions Collecting From Web of "没有事先close()Android的游标最终确定"

您必须在数据库之前关闭光标。 将代码放在try / catch块和finally块中,关闭游标,然后关闭数据库:

 try { db = ... } catch(Exception ex) { // Log the exception's message or whatever you like } finally { try { if( cursor != null && !cursor.isClosed()) cursor.close(); if( db.isOpen() ) db.close(); } catch(Exception ex) {} } 

在与DB或内容提供商进行IO时,关闭顺序非常重要。 有关更多信息,请参阅此链接

要find这样的问题,只需启用StrictMode for Debug Version:

 public void onCreate() { if (DEVELOPER_MODE) { StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detectNetwork() // or .detectAll() for all detectable problems .penaltyLog() .build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects() .detectLeakedClosableObjects() .penaltyLog() .penaltyDeath() .build()); } super.onCreate(); } 

更多信息@ http://developer.android.com/reference/android/os/StrictMode.html

祝一切顺利,

始终,请记住在关闭数据库之前通过调用cursor.close()来关闭游标。 这应该可以解决你的问题。

让活动通过使用startManagingCursor(c)管理游标生命周期,它会没事的。