2015-09-21 90 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

相關問題