在onLoadFinished中为Loader Manager从Cursor中提取数据

时间:2016-12-20 19:58:39

标签: android cursor android-loadermanager

我在onLoadFinished中有代码行,用于片段中的Loader Manager回调。代码的问题是需要在ArrayAdapter中显示favoriteMovies,因此无论什么原因,它都为零,而日志语句显示游标或数据不为空。

@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语句完成。当我将我的应用程序最小化到后台并恢复它时,电影会被显示,但它在第一次被调用时不起作用。

1 个答案:

答案 0 :(得分:0)

经过多次试验,我必须检查光标以确定它是否是最后一个索引,然后调用我的其他函数,如下所示。

@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();
    }

}