2

我需要销毁一个加载器,有时我会得到以下异常:

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

这是否意味着装载机可能已经不知何故已经消失了?还有人看到这个吗?

谢谢

4

3 回答 3

1

Mayeb 加载程序持有对超出范围的 Context 的引用:当您更改活动或加载程序时会发生这种情况吗?

于 2012-06-05T12:56:17.653 回答
0

对我来说没问题,要么他们更新了库,要么这是它应该被调用的顺序:

@Override
public void onDestroy() {
    getActivity().getSupportLoaderManager().destroyLoader(0);
    super.onDestroy();
}
于 2014-05-05T12:06:43.683 回答
0

你得到 NPE 是因为你没有意识到loaderManager.getLoader(id)如果加载器不再存在,它可以返回 null。

Android 开发者文档说:

public abstract Loader<D> getLoader (int id)

如果没有找到匹配的 Loader,则返回具有给定 id 或 null 的 Loader。

所以你需要的是添加一个空检查,如:

LoaderManager lm = ...;
Loader loader = ...;
if (loader != null) {    //this will fix you NPE
    lm.destroyLoader(loader.getId());
}

或者你可以避免所有的大惊小怪,并在下面的代码行中销毁加载器:

lm.destroyLoader(LOADER_ID);
于 2015-12-14T07:01:50.600 回答