【问题标题】:Extracting data from Cursor in onLoadFinished for Loader Manager从加载器管理器的 onLoadFinished 中的光标中提取数据
【发布时间】:2016-12-20 19:58:39
【问题描述】:

我在 onLoadFinished 中有代码行,用于片段中的加载程序管理器回调。代码的问题是,最喜欢的电影需要显示在 ArrayAdapter 中,所以无论什么原因,它是零,而日志语句显示光标或数据不为空。

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    Log.i(TAG, "Loader Manager Loading Finished: " + data.getCount());
    if (data != null && data.getCount() > 0) {
            while (data.moveToNext()) {
                favouriteMovies.add(
                        new Movie(
                                data.getString(2),
                                data.getString(3),
                                data.getString(4),
                                data.getInt(1),
                                data.getString(5),
                                data.getDouble(6),
                                data.getDouble(7)
                        ));

        }
        setMovies(favouriteMovies);
        hideLoadingProgress();
        mAdapter.notifyDataSetChanged();

    } else {
        showEmptyView(EMPTY_VIEW_TYPE_LOCAL);
        hideLoadingProgress();
    }

}

如何编写此代码,以便在调用 setMovies() 方法之前实际等待 while 语句完成。当我将我的应用程序最小化到后台并恢复它时,电影会显示出来,但它在第一次调用时不起作用。

【问题讨论】:

  • "The problem with the code is that the favoriteMovies is needed to be displayed in the ArrayAdapter",是的,这确实是个问题,在处理基于Cursor 的数据时不要使用ArrayAdapter,而是使用SimpleCursorAdapter(或任何其他CursorAdapter
  • 你是对的,但是 SimpleCursorAdapter 不会作为数据的一部分,它是使用映射到模型的改造从服务器作为 json 获取的,所以我有两个数据源。
  • 然后使用MatrixCursor,很可能与MergeCursor结合使用
  • 我会检查的。感谢您的回复。

标签: android cursor android-loadermanager


【解决方案1】:

经过多次尝试,我只需检查光标以了解它是否是最后一个索引,然后调用我的其他函数,如下所示。

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    Log.i(TAG, "Loader Manager Loading Finished: " + data.getCount());
    favouriteMovies.clear();
    if (data != null && data.getCount() > 0) {
        while (data.moveToNext()) {
            favouriteMovies.add(
                    new Movie(
                            data.getString(2),
                            data.getString(3),
                            data.getString(4),
                            data.getInt(1),
                            data.getString(5),
                            data.getDouble(6),
                            data.getDouble(7)
                    ));
            if (data.isLast()) {
                setMovies(favouriteMovies);
                hideLoadingProgress();
                mAdapter.notifyDataSetChanged();
            }
        }


    } else {
        showEmptyView(EMPTY_VIEW_TYPE_LOCAL);
        hideLoadingProgress();
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 2012-05-21
    • 2020-02-01
    • 1970-01-01
    相关资源
    最近更新 更多