在我的应用程序中,我收到只在摩托罗拉手机上出现的零星游标错误报告。我正在使用由SQLite查询支持的ListView查看目录,并且在远程或本地更新目录时刷新查询。在摩托罗拉Android设备上崩溃
我们看到最常见的错误是:
- java.lang.IllegalStateException:当 光标有效
- java.lang.IllegalStateException这应该只能被称为:关闭游标
- android.database.StaleDataException:访问关闭的游标
- java.lang.IllegalStateException:尝试重新打开一个 已关闭的对象:android.database.CursorWindow
这是一个已知问题,是否存在修复或解决方法?
我用的AsyncTask更新列表:
private class RefreshTask extends AsyncTask<Void, Void, Cursor> {
protected Cursor doInBackground(Void... params) {
return ReaderHelper.getItemCursor(getActivity(), ReaderHelper.itemFilter);
}
protected void onPostExecute(Cursor csr) {
int count = csr.getCount();
loadingBar.setVisibility(View.GONE);
if (count == 0) {
if (ReaderHelper.itemFilter.unread) emptyMessage.setText(getText(R.string.msg_no_item_unread));
else emptyMessage.setText(getText(R.string.msg_no_item));
}
mCursor = csr;
getActivity().startManagingCursor(mCursor);
mAdapter.changeCursor(mCursor);
}
}
这是适配器。
private class ItemsAdapter extends ResourceCursorAdapter {
private ItemsAdapter(Context c, Cursor csr) {
super(c, R.layout.item_list_row, csr, false);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = super.newView(context, cursor, parent);
view.setTag(new ItemViewHolder());
return view;
}
@Override
public void bindView(View v, Context c, Cursor csr) {
...
}
}
没有发布你的代码,很难得到一个好的解决方案。 –