2014-09-28 68 views
0

我真的很抱歉,如果這看起來像一個微不足道的問題,但我沒有任何運氣。java:試圖添加到對象列表並獲得nullPointerException

我創建類似的自定義對象

public class Foo { 
     long id = 0; 
     int counter = 0; 
     String label = null; 

     public void setId(long in){ 
     this.id = in; 
     } 

     public void setCounter(int in){ 
     this.counter = in; 
     } 

     public void setLabel(String in){ 
     this.label = in; 
     } 
} 

我然後在另一個類中創建一個列表

public class ActivityThingy extends MainActivity { 
     List<Foo> bar = new ArrayList<Foo>(); 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       function(); 
     } 

     private void function(){ 
      Foo kit = new Foo(); 
      kit.setId(1); 
      kit.setCounter(1); 
      kit.setLabel(""); 
      bar.add(kit); 
     } 

    } 

然後我嘗試在同一的另一種方法的對象添加到它類創建列表。

對象列表項正被添加到列表初始化的類中的一個方法中。該列表旨在爲該類的全局列表,以便可以重複調用該方法以基於用戶輸入將多個項目添加到列表中。

雖然每次都得到一個空指針異常。很顯然,我希望它將項目添加到列表中,而不是拋出該異常。

還有什麼可以忽略的?

我正在使用Android Studio BTW。

+0

你可能有一個錯誤的創建順序,即你試圖在創建「bar」前添加「Foo」到「bar」。 只是一個提示..如果你想得到更好的幫助,發佈更多的代碼(最好是整個班級),因爲發佈它像你做的那樣是模糊的,並不能提供足夠的信息,說明你的問題可能發生在哪裏。 – crazyPixel 2014-09-28 00:47:52

+0

所以我實際上是初始化類構造函數中的列表,然後在該類中的方法中調用bar.add(kit)。 爲什麼不能這樣工作? – Velogiraptor 2014-09-28 01:22:29

+0

必須執行describeContents和writeToParcel,這些用於Parcelable的方法。因爲我運行相同的代碼,並沒有得到錯誤。 – Chitrang 2014-09-28 01:31:29

回答

0

這是後人發生的事情。

我有上述的對象,並設置對象的值也如上所述。問題是,我還通過意向附加功能爲該對象傳遞了一個值。

下面是上面的代碼在我身上爆炸的地方。

當我從另一個活動中傳遞該對象時;它將「label」的值重置爲null,如新對象中所聲明的那樣。對象中缺省值爲null的字符串是我的問題。

我的解決辦法是改變

String label = null; 

String label = new String(); 

我不再得到了空指針異常。

如果任何人有任何問題,我將編輯這個答案更詳細。如果需要更多細節,請發表評論。

0

據您的問題提供的代碼,您是在設置id, counter and label in id看,當你打電話給你保存它像this.id = in;setCounter(int in)你的代碼應該是this.counter = in;

替換下面一個你Foo類的:

public class Foo { 
     long id = 0; 
     int counter = 0; 
     String label = null; 

     public void setId(long in){ 
     this.id = in; 
     } 

     public void setCounter(int in){ 
     this.counter = in; 
     } 

     public void setLabel(String in){ 
     this.label = in; 
     } 
} 
+0

對不起,這只是示例代碼中的複製粘貼錯誤。在真實的課堂上,這是正確的。我已經編輯了這個例子,並且謝謝你的收穫! – Velogiraptor 2014-09-29 05:56:02

相關問題