2013-06-24 20 views
9

在Android Studio中,我有点困惑。我没有在Eclipse中看到过这种错误。Android Studio中的方法调用highlighed错误

实施例:

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

此代码工作正常,但fragmentManager.beginTransaction();突出显示并说: 方法调用'fragmentManager.beginTransaction'可能会产生'java.lang.NullPointerException'更少...(Ctrl + F1)

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

我必须检查Null吗?

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

我从来没有在任何啧啧或例子之前见过这个。 如果这是一个愚蠢的问题比遗憾,但我仍然是一个初学者:) 。

+0

为了为了避免NPE,你必须检查返回的参考是否为空 – Blackbelt

回答

11

从我看到的情况来看,Android Studio对潜在的NullPointerExceptions显示了太多的警告,即使对于永远不会返回null的方法也是如此。我简单地忽略了其中的一些,但仔细检查所有这些是有用的,因为有时我错过了一个重要的。

如果你看一下Android源代码,可以很容易地看到,getFragmentManager()不会返回NULL:

public FragmentManager getFragmentManager() { 
    return mFragments; 
} 

凡mFragments通过全班同学分配只有一次:

final FragmentManagerImpl mFragments = new FragmentManagerImpl(); 
+0

好的,我明白了。感谢这些信息。 – Katamave

+0

有没有机会减少这种冗长? IDEA没有这样的问题。 – mente

+0

@mente这很可能会在未来得到修复。最后的版本已经比以前显示更少的警告。 – Dalmas