【问题标题】:Later Defining variable (else: NullPointerException)稍后定义变量(否则:NullPointerException)
【发布时间】:2015-05-26 21:07:18
【问题描述】:

我有一个 ArrayList,它在一个函数中定义,并在另一个函数中调用。但是当我在开头添加public ArrayList<String> list = new ArrayList<String>();,然后运行一个将项目添加到该列表的函数,然后尝试在另一个函数中调用list,它会覆盖前一个集合并返回一个空列表。 但是当我一开始只有public ArrayList<String> list;时,再次在一个函数中添加项目,然后尝试使用list,它会抛出一个NullPointerException。 我还尝试在 onCreate 方法中使用 ArrayList<String> list = new ArrayList<String>();,但这也是 NPE。

所以只有一个功能

public void setList() {    
   for(int x=0; x<=5;x++){
      list.add(Integer.toString(x));
   }
}

Integer.toString(x) 目前仅用于测试) 另一个是

public void setList() {
   Log.d("Log",list.toString());
}

public class MainActivity extends FragmentActivity {之后的最开始 我试过了

public ArrayList<String> list; //this throws a NPE

public ArrayList<String> list = new ArrayList<String>(); //this overwrites the variable each time it's called

我该如何解决这个问题?

问题可能是我在 set 方法之后和调用 get 方法之前更改了显示的 Fragment 吗?

非常感谢

【问题讨论】:

  • 你能告诉我们你的代码吗?描述有点混乱。
  • 听起来您只需要另一个列表? - 是的,实际上代码会有所帮助。
  • 你能包含更多代码吗?我们需要查看列表的声明位置。
  • 如果同时修改同一个列表,可以使用ConcurrentLinkedQueue或者syncronized(list)就可以了。

标签: android variables arraylist overwrite


【解决方案1】:

在代码顶部使用 1 个列表对象,不要在函数中创建新对象。它应该是这样的。

public static ArrayList<String> list = new ArrayList<String>();

// onCreate....

public void addElement() {
   for(int x=0; x<=5;x++){
       list.add(Integer.toString(x));
   }
}

public void showElements() {
    Log.d("Log",list.toString());
}

【讨论】:

  • 这就是它给我一个空列表的地方。但是,正如刚刚添加到问题中的那样,问题可能是我在 set 方法之后和调用 get 方法之前更改了显示的 Fragment 吗?
  • 如果你正在创建一个新的显示片段是的。在这种情况下,您可以使用 public static ArrayList list = new ArrayList();持久化数据。
  • 谢谢!这解决了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多