Loader 并不总是触发 onLoadFinished 回调
Loader is not allways firing onLoadFinished callback
我正在使用 AsyncTaskLoader 从 Web 获取数据 api 但由于某些原因,加载程序并不总是触发 onLoadFinished 回调。
这是我的 Fragment 的片段,说明我如何使用加载程序。我总是重启加载器 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)
{
}
};
即使已经是运行,也可以这样重启loader吗?这会导致装载机卡住吗?有时加载器被正常触发并且它正在做工作,但它更新时触发 onLoadFinished 回调。当加载程序像这样卡住时,重新启动片段/关闭应用程序可以解决问题。
我也遇到过这种问题。我不确定它在 LoaderManager.RestartLoader
中的错误还是 getLoaderManager().destroyLoader(Loader_id)
中的错误,然后 getLoaderManager().initLoader()
对我有用。
希望对您有所帮助。
我正在使用 AsyncTaskLoader 从 Web 获取数据 api 但由于某些原因,加载程序并不总是触发 onLoadFinished 回调。
这是我的 Fragment 的片段,说明我如何使用加载程序。我总是重启加载器 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)
{
}
};
即使已经是运行,也可以这样重启loader吗?这会导致装载机卡住吗?有时加载器被正常触发并且它正在做工作,但它更新时触发 onLoadFinished 回调。当加载程序像这样卡住时,重新启动片段/关闭应用程序可以解决问题。
我也遇到过这种问题。我不确定它在 LoaderManager.RestartLoader
中的错误还是 getLoaderManager().destroyLoader(Loader_id)
中的错误,然后 getLoaderManager().initLoader()
对我有用。
希望对您有所帮助。