【问题标题】:Android: ListView CursorAdapter Crash On Database Change?Android:ListView CursorAdapter 在数据库更改时崩溃?
【发布时间】: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


【解决方案1】:

我通过删除 getLoaderManager().initLoader() 解决了这个问题,因为它会自动管理我的光标。

【讨论】:

    猜你喜欢
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多