我的应用程序中有一个处理游标的奇怪问题。
我有一个带有两个ListFragments的片段管理器。两个ListFragments都包含从我的数据库中提取的项目列表 - 但不同的项目,如在不同的数据结构中。
当我第一次启动我的应用程序时,第一个可见的ListFragment工作正常,但第二个只有默认值。我将问题追溯到我的代码的这一部分
try {
sub = Subscription.getByCursor(cursor);
} catch (IllegalStateException e) {
e.printStackTrace();
}
我失败并返回了IllegalStateException
E/CursorWindow(30684): Failed to read row 5, column -1 from a CursorWindow which has 33 rows, 7 columns.
W / System.err(30684):java.lang.IllegalStateException:无法从CursorWindow读取第5行col -1。在从中访问数据之前,请确保Cursor已正确初始化。
然而,当我开始调试应用程序时,我无法重现错误。我花了很长时间才意识到包含了时间依赖性。如果我让我的代码等待(就在我初始化第二个(损坏的)片段之前),就像这样:
try{ Thread.sleep(10000); }catch(InterruptedException e){ }
它确实有效。
我猜这与第一个片段中的光标在第二个片段中被重用有关,但它们是不同的类,所以我看不出这是怎么可能的。
有什么建议吗?
最好的
马库斯