首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与CursorLoader和MergeCursor一起使用分页关闭旧游标

与CursorLoader和MergeCursor一起使用分页关闭旧游标
EN

Stack Overflow用户
提问于 2016-01-16 15:24:36
回答 1查看 1.1K关注 0票数 2

正如标题所述,当尝试对由ListViewCursorLoader支持的SimpleCursorAdapter分页时,旧游标将被关闭,因此引发下面的异常。前两个页面加载得很好(第一个页面不使用MergeCursor,第二个页面是第一个使用MergeCursor的页面)。我不会在任何光标上调用任何close()

有趣的是,在调试过程中,我无法看到任何游标上的关闭标志被设置为真,这是值得的。这可能是MergeCursor的一个问题。如果你们有什么解决办法,让我知道,我没办法了。

堆栈跟踪:

代码语言:javascript
运行
复制
android.database.StaleDataException: Attempting to access a closed CursorWindow.Most probable cause: cursor is deactivated prior to calling this method.
    at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:139)
    at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:74)

代码:

代码语言:javascript
运行
复制
private List<Cursor> mCursorsList = new ArrayList<>();

@Override
public void onScroll(AbsListView view, int firstVisibleItem,
                     int visibleItemCount, int totalItemCount)
{
    if (!isLoading && !isAllLoaded &&
            firstVisibleItem != 0 &&
            firstVisibleItem == totalItemCount - visibleItemCount)
        getActivity().getSupportLoaderManager().restartLoader(LOADER_ID, null, this);
}

@Override
public void onLoadFinished(Loader<Cursor> loader, final Cursor data)
{
        Cursor oldCursor = mCursorAdapter.getCursor();
        mCursorsList.add(data);
        if (oldCursor != null)
        {
            Cursor[] cursorArray = mCursorsList.toArray(new Cursor[mCursorsList.size()]);
            MergeCursor newCursor = new MergeCursor(cursorArray);
            mCursorAdapter.swapCursor(newCursor);
        }
        else // first cursor
        {
            mCursorAdapter.swapCursor(data);
        }
}

@Override
public void onLoaderReset(Loader<Cursor> loader)
{
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-17 23:52:12

造成此问题的主要原因是CursorLoader管理内部游标,因此每当需要打开新游标(例如新页面查询)时,就会关闭旧游标。

对于更简单的分页实现,不要使用偏移量进行查询,只需在每个页面上增加限制,以便新的游标也包含所有以前的页面。此外,正如Ian在Google+上所建议的那样,有时甚至不需要分页,特别是当您正在进行复杂的连接或对数据进行排序时。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34828657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档