2015-09-21 58 views
1

我有BookFragment:在某些android情况下,可以提前初始化吗?

public class BooksFragment extends Fragment { 
private final String ALL_PUBLISHERS = "Wszystkie Wydawnictwa"; 

,后来在私人无效的方法,我在访问ALL_PUBLISHERS场这样的:

if(chosenPublisher != null && chosenPublisher.equals(ALL_PUBLISHERS)) 
    doStuff(); 

现在,似乎无可厚非机智的代码,我个人从来没有遇到过麻烦,但感谢Google Play开发者控制台我注意到,有些用户在访问ALL_PUBLISHERS字段时遇到NullPointerException。

现在:

  • 麻烦是ALL_PUBLISHERS场 - stack
  • 我BookFragment在FragmentStatePagerAdapter使用,
  • 错误发生在各种Android设备

我是怎么看的原因感觉?

回答

2

我认为你是以错误的方式解释堆栈跟踪;

的方法调用在一个空对象引用在日志的状态下提示

尝试调用虚拟方法“布尔 java.lang.String.equals(java.lang.Object中)”在左侧变量是chosenPublisher。如果您在代码中以某种并发方式修改chosenPublisher变量,则在某些交错中可能会发生NPE异常,因为您的状态不是原子的。 另一方面,您的静态字段ALL_PUBLISHERS在类加载时初始化:如果您没有修改它,它不能为空。

总之,我的建议是使用ALL_PUBLISHERS变量作为您的左侧元素在你的条件语句:

if(chosenPublisher != null && ALL_PUBLISHERS.equals(chosenPublisher)) 
    doStuff(); 
+0

虽然它只是'ALL_PUBLISHERS.equals(chosenPublisher)'就足够了。并使ALL_PUBLISHERS为静态。 –

+0

是的,我错过了失踪的静态大声笑 – bonnyz

相关问题