自定义CursorAdapter中的“Finalizing Cursor”错误问题

时间:2010-09-07 10:44:23

标签: java android database sqlite cursor

我有一个游标适配器,只要点击一个视图,logcat就会出现上述错误。我已经在onDestroy()中发布了CursorAdapter的游标。

有没有办法获取有关游标何时打开的信息?

4 个答案:

答案 0 :(得分:2)

我一直在寻找相同的东西并且围绕着SDK。

游标终结器查看是否设置了某些调试属性,并在请求时打印出整个堆栈跟踪。 它们可以在Android源代码中的SQLiteDebug.java中找到。

/**
 * Controls the stack trace reporting of active cursors being
 * finalized.
 */
 public static final boolean DEBUG_ACTIVE_CURSOR_FINALIZATION =
   Log.isLoggable("SQLiteCursorClosing", Log.VERBOSE);

只需设置属性(使用adb shell)log.tag.SQLiteCursorClosing并再次检查logcat。

setprop log.tag.SQLiteCursorClosing Log.VERBOSE

这可能仅适用于Froyo及更高版本,我没有检查较旧SDK的来源。

答案 1 :(得分:1)

使用startManagingCursor(cursor)代替onDestroy()选项 - 这样更干净,更好。

答案 2 :(得分:0)

初始化光标后,您应该在ListActivity中使用startManagingCursor(c)。比活动将处理光标而你不必关心它。

答案 3 :(得分:0)

使用startManagingCursor(c)没用,可能会导致其他bug,比如尝试重新查询已经有cloesd的游标,可以使用c.close(),在onPause()中释放CursorAdapter的游标。不在onDestroy()中。 ps:这可能是android4.0中的用户。