我需要销毁一个加载器,有时我会得到以下异常:
java.lang.NullPointerException
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:960)
at android.support.v4.app.FragmentManagerImpl.performPendingDeferredStart(FragmentManager.java:768)
at android.support.v4.app.FragmentManagerImpl.startPendingDeferredFragments(FragmentManager.java:1104)
at android.support.v4.app.LoaderManagerImpl.destroyLoader(LoaderManager.java:672)
at com.me.test.MyTest.test(MyTest.java:213)
我正在做以下事情:
LoaderManager lm = ...;
Loader loader = ...;
lm.destroyLoader(loader.getId());
这是否意味着装载机可能已经不知何故已经消失了?其他人都看到了吗?
由于
答案 0 :(得分:1)
Mayeb加载器持有对超出范围的Context的引用:当你改变活动或加载器时会发生这种情况吗?
答案 1 :(得分:0)
对我来说没问题,要么他们更新了库,要么就是它应该调用的顺序:
@Override
public void onDestroy() {
getActivity().getSupportLoaderManager().destroyLoader(0);
super.onDestroy();
}
答案 2 :(得分:0)
你得到了NPE,因为你没有意识到如果加载器不再存在,loaderManager.getLoader(id)
可以返回null。
public abstract Loader<D> getLoader (int id)
返回具有给定id的Loader,如果没有找到匹配的Loader,则返回null。
所以你需要的是添加一个null检查,如:
LoaderManager lm = ...;
Loader loader = ...;
if (loader != null) { //this will fix you NPE
lm.destroyLoader(loader.getId());
}
或者你可以避免所有的麻烦,并按照代码行破坏加载器:
lm.destroyLoader(LOADER_ID);