我几乎没有使用sqlite数据库的活动,当然使用游标但是在我使用游标的每个方法中我都会一直关闭它们。 。 。 即使我关闭游标仍然得到这个消息
I/dalvikvm( 5232): at android.database.sqlite.SQLiteCursor.finalize(SQLiteCursor.java:631)
I/dalvikvm( 5232): at dalvik.system.NativeStart.run(Native Method)
I/dalvikvm( 5232): Uncaught exception thrown by finalizer (will be discarded):
I/dalvikvm( 5232): Ljava/lang/IllegalStateException;: Finalizing cursor android.database.sqlite.SQLiteCursor@467ed108 on my_table_name that has not been deactivated or closed
究竟是什么问题?我怎样才能找到代码中的错误?应该“(SQLiteCursor.java:631)”对我有意义吗?
由于
答案 0 :(得分:1)
不,但是这个
android.database.sqlite.SQLiteCursor@467ed108
可以帮助您确定哪一个是未正确关闭的那个。您可以记录光标的引用,您将获得与上面类似的字符串,例如:
Log.d("ActivityX", cursor1);
答案 1 :(得分:0)
您已关闭数据库连接但未关闭游标
当关闭DB连接时,首先检查Cursor,就像那样..
Cursor c;
if (c != null) {
c.deactivate();
c.close();
}
答案 2 :(得分:0)
当一个线程由于错误而终止并且随之关闭活动时,我遇到了这个错误。可能就是这就是发生的事情。您可能希望检查错误上方的logcat输出,以查看是否有另一个错误导致线程结束活动,从而产生额外错误。
答案 3 :(得分:0)
我还在我的应用中修复了此错误。当我用游标进行fetch调用时,我正在执行以下检查:
if (mCursor != null && Cursor.getCount() > 0) {
//Iterate through cursor list
mCursor.close();
}
导致此错误的原因是,即使getCount()== 0,您仍需要关闭游标。逻辑应为:
if (mCursor != null) {
if(mCursor.getCount() > 0) {
//Iterate through cursor list
}
mCursor.close();
}
希望能有所帮助。