10

Android Studioで少し混乱しています。以前にEclipseでこの種のエラーを見たことはありません。

例:

    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction tf = fragmentManager.beginTransaction();
    Fragment oldFragment = fragmentManager.findFragmentByTag(AddDialogFragment.TAG);

このコードは正常に動作していますが、fragmentManager.beginTransaction(); 強調表示され、次のように表示されます: メソッド呼び出し 'fragmentManager.beginTransaction' が 'java.lang.NullPointerException' を生成する可能性があります ... (Ctrl+F1)

このインスペクションは、指定されたインスペクション スコープ内で常に true または false である条件を報告し、コードのデータ フロー分析に基づいて、RuntimeException がスローされる可能性がある場所を指摘します。このインスペクションは、Nullable/NotNull 契約違反も報告します。コントラクトをサポートするアノテーションを構成できます (デフォルトでは、annotations.jar の @Nullable/@NotNull アノテーションが使用されます)

前に Null をチェックする必要がありますか?

    FragmentManager fragmentManager = getFragmentManager();
    if(fragmentManager != null)
       FragmentTransaction tf = fragmentManager.beginTransaction();
    Fragment oldFragment = fragmentManager.findFragmentByTag(AddDialogFragment.TAG); 

私は、Tut や Example でこれを見たことがありません。これがばかげた質問なら申し訳ありませんが、私はまだ初心者です:)。

4

2 に答える 2

13

NullPointerExceptions私が見たところ、 null を返さないメソッドであっても、Android Studio は potential に関する警告を少し多すぎます。私はそれらのいくつかを単に無視していますが、重要なものを見落としていることがあるので、すべてを注意深くチェックすることは役に立ちます。

Android のソース コードを見ると、getFragmentManager()null が返されないことが簡単にわかります。

public FragmentManager getFragmentManager() {
    return mFragments;
}

mFragments は、クラス全体で一度だけ割り当てられます。

final FragmentManagerImpl mFragments = new FragmentManagerImpl();
于 2013-06-24T08:31:57.953 に答える