【发布时间】:2015-09-21 03:04:02
【问题描述】:
我有一个由光标适配器支持的列表视图。 但是,当我在后台同步时对数据库进行更改时,应用程序崩溃并显示以下内容:
java.lang.IllegalStateException: couldn't move cursor to position 0
at android.support.v4.widget.CursorAdapter.getView(CursorAdapter.java:248)
at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:232)
at android.widget.AbsListView.obtainView(AbsListView.java:2842)
at android.widget.ListView.makeAndAddView(ListView.java:1884)
at android.widget.ListView.fillSpecific(ListView.java:1364)
at android.widget.ListView.layoutChildren(ListView.java:1671)
at android.widget.AbsListView.onLayout(AbsListView.java:2632)
此外,我添加的数据会清除数据库并且根本不插入任何数据。我很困惑,因为我认为游标与数据库是异步的。
崩溃发生在同步结束和我发送广播以通知活动同步完成之间。广播接收者甚至没有收到广播。
我的问题是我怎样才能多线程呢?也就是说,我怎样才能清除和更改数据库,然后在同步完成后在活动上更新光标?
【问题讨论】:
-
在修改数据后使用 notifydatasetchanged() 方法,而不是手动进行
-
我不太清楚您所说的“我虽然光标与数据库异步”是什么意思,如果您想在一个线程中更新表同时继续显示列表视图,使用起来总是更安全ContentProviders 和 Loaders。
标签: android listview cursor simplecursoradapter