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

ローダーが範囲外のコンテキストへの参照を保持している可能性があります。これは、アクティビティまたはローダーを変更したときに発生しますか?

于 2012-06-05T12:56:17.653 に答える
0

loaderManager.getLoader(id)ローダーが存在しなくなった場合に null を返す可能性があることに気付いていないため、NPE が発生します。

Android デベロッパー ドキュメントには次のように書かれています。

public abstract Loader<D> getLoader (int id)

指定された ID を持つローダーを返します。一致するローダーが見つからない場合は null を返します。

したがって、次のような null チェックを追加する必要があります。

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 に答える
0

彼らがライブラリを更新したか、これが呼び出されるべき順序であるかのどちらかです。

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