【问题标题】:Loader is not allways firing onLoadFinished callback加载器并不总是触发 onLoad Finished 回调
【发布时间】:2016-01-13 15:36:24
【问题描述】:

我正在使用 AsyncTaskLoader 从 web api 获取数据,但由于某种原因,加载程序并不总是触发 onLoadFinished 回调。

这是我的片段中的片段,我如何使用加载器。我总是重新启动加载程序 restartLoader(...).forceload() 以更新结果。加载程序是根据用户交互触发的。

private void getData() {
    Bundle bundle = new Bundle();
    bundle.putParcelable("userInput", mUserInputData);
    getLoaderManager().restartLoader(CARS_LOADER_ID, bundle, carsLoaderListener).forceLoad();
}


private LoaderManager.LoaderCallbacks<List<Car>> carsLoaderListener = new LoaderManager.LoaderCallbacks<List<Car>>()
{
    @Override
    public Loader<List<Car>> onCreateLoader(int id, Bundle args)
    {;
        return new CarsLoader(getActivity(), (UserInput)args.get("userInput"));
    }

    @Override
    public void onLoadFinished(Loader<List<Car>> loader, List<Car> data)
    {
        // This is not allways get called
        setData(data);
    }

    @Override
    public void onLoaderReset(Loader<List<Car>> loader)
    {
    }
};

即使加载程序已经在运行,也可以像这样重新启动加载程序吗?这会导致装载机被卡住吗?有时加载程序被触发并正常工作,但它更新触发 onLoadFinished 回调。当加载器像这样卡住时,重新启动片段/关闭应用程序可以解决问题。

【问题讨论】:

    标签: android loader asynctaskloader


    【解决方案1】:

    我也遇到过这种问题。我不确定它在LoaderManager.RestartLoader 或除getLoaderManager().destroyLoader(Loader_id)getLoaderManager().initLoader() 之外的其他任何错误是否对我有用。

    希望这会有所帮助。

    【讨论】:

    • 谢谢!看起来它可能会有所帮助。不过需要做更多的测试。仍然很奇怪的问题,我认为是 LoaderManager 中的错误...
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多