在某些Android案例中早期初始化是否有问题?

时间:2015-09-21 14:26:23

标签: java android android-fragments

我有BookFragment:

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

以及稍后在private void方法中我正在访问ALL_PUBLISHERS字段,如下所示:

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

现在代码似乎没有任何问题,我个人从来没有遇到过这方面的麻烦但是感谢Google Play Developer Console我注意到一些用户在访问ALL_PUBLISHERS字段时遇到了NullPointerException。

现在:

  • 麻烦在ALL_PUBLISHERS字段中 - stack
  • 我的BookFragment用于FragmentStatePagerAdapter,
  • 在各种Android设备中发生错误

我的感受是什么?

1 个答案:

答案 0 :(得分:2)

我认为你是以错误的方式解释堆栈跟踪;日志声明以下提示

  

尝试调用虚方法' boolean   java.lang.String.equals(java.lang.Object中)'在空对象引用上

在左侧变量chosenPublisher上调用该方法。如果您在代码中以某种并发方式修改chosenPublisher变量,则在某些交错中可能会发生NPE异常,因为 if statament不是原子的。 另一方面,静态字段ALL_PUBLISHERS在类加载时初始化:如果您没有修改它,则它不能为空。

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

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