2014-09-28 64 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

相关问题