Android Studio中的方法调用高亮度错误

Kat*_*ave 10 android nullpointerexception android-studio

我在Android Studio中有点困惑.我之前没有在Eclipse中看到过这种错误.

例:

    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction tf = fragmentManager.beginTransaction();
    Fragment oldFragment = fragmentManager.findFragmentByTag(AddDialogFragment.TAG);
Run Code Online (Sandbox Code Playgroud)

这段代码工作得很好,但是fragmentManager.beginTransaction(); 突出显示并说:方法调用'fragmentManager.beginTransaction'可能会产生'java.lang.NullPointerException'较少...(Ctrl + F1)

此检查报告指定检查范围中始终为true或false的条件,并根据代码的数据流分析指出可能抛出RuntimeException的位置.此检查还报告Nullable/NotNull合同违规.可以配置支持合同的注释(默认情况下,@ Nullable/@NotNull将使用annotations.jar中的注释)

我以前要检查Null吗?

    FragmentManager fragmentManager = getFragmentManager();
    if(fragmentManager != null)
       FragmentTransaction tf = fragmentManager.beginTransaction();
    Fragment oldFragment = fragmentManager.findFragmentByTag(AddDialogFragment.TAG); 
Run Code Online (Sandbox Code Playgroud)

我以前从未在任何Tut或例子中看过这个.如果这是一个愚蠢的问题而不是抱歉,但我仍然是初学者:).

Dal*_*mas 13

从我所看到的,Android Studio显示了一些关于潜力的警告NullPointerExceptions,即使对于永远不会返回null的方法也是如此.我只是忽略其中的一些,但仔细检查所有这些是有用的,因为有时我错过了一个重要的.

如果你看一下android源代码,很容易看出getFragmentManager()永远不会返回null:

public FragmentManager getFragmentManager() {
    return mFragments;
}
Run Code Online (Sandbox Code Playgroud)

mFragments只在整个类中分配一次:

final FragmentManagerImpl mFragments = new FragmentManagerImpl();
Run Code Online (Sandbox Code Playgroud)

  • 根据这个问题/sf/ask/1941973001/,`getFragmentManager()`如果片段未附加到活动,则返回`null` (2认同)