方法中的ArrayList嵌套ArrayList

3

我在程序中尝试使用包含ArrayList的ArrayList,但是遇到了问题。我收到一个奇怪的警告:add @SuppressWarnings "null" to processArray()。无论我是否添加此警告,我的程序都会崩溃。这里有什么明显的错误吗?任何帮助都将有很大帮助,谢谢。

      private ArrayList<ArrayList<String>> processArray(ResponseList<Status> responses){

      ArrayList<ArrayList<String>> mainArray = null;
      ArrayList<String> innerArrays = null;

      for (Status response: responses ){
          String name, status, imgUrl, time;

          name = response.getUser().getName();
          status = response.getText();
          imgUrl = response.getUser().getProfileImageURL().toString();
          time = response.getCreatedAt().toString();

          ArrayList<String> rtLinks = checkLinks(response.getText());

          if(rtLinks != null){

              for (String tLink: rtLinks){

                  innerArrays.add(name);
                  innerArrays.add(status);
                  innerArrays.add(imgUrl);
                  innerArrays.add(time);
                  innerArrays.add(tLink);

                  mainArray.add(innerArrays);

              }

          }


      }
    return mainArray;

学会阅读错误,通常会有异常的名称和行号。 - Hidde
3个回答

5
您从未初始化这两个ArrayList。
您需要:
ArrayList<ArrayList<String>> mainArray = new ArrayList<ArrayList<String>>(); // or new ArrayList<>() in java 7

在内部for循环中:

ArrayList<String> innerArrays = new ArrayList<String>(); // or new ArrayList<>() in java 7

同样,不要仅仅为了让代码能够工作而压制警告。只有在确切知道警告出现的原因以及忽略它们的原因时才进行压制。

哇,我就知道这是个非常愚蠢的问题!谢谢你的帮助!! - Edmund Rojas

2

你的程序很可能因为NullPointerException而崩溃。当你尝试访问一个值为null的变量时(称为解除空指针引用),就会发生这种情况。在访问这两个ArrayList之前,你需要对它们进行初始化。尝试将这两行代码更改为以下内容:

  ArrayList<ArrayList<String>> mainArray = new ArrayList<ArrayList<String>>();
  ArrayList<String> innerArrays = new ArrayList<String>();

这应该可以解决您目前的问题。

然而,我不确定为什么您需要使用一个innerArrays列表。我会将最后一部分重构为:

for (String tLink: rtLinks){
    ArrayList<String> tempList = new ArrayList<String>();
    tempList.add(name);
    tempList.add(status);
    tempList.add(imgUrl);
    tempList.add(time);
    tempList.add(tLink);
    mainArray.add(tempList);
}

并删除innerArrays变量。这样,作用域更有限,代码运行更合理。


1
你正在尝试将innerArrays变量添加到主ArrayList中,但是你在方法的开头声明了主ArrayList为null。将主ArrayList初始化为一个新的字符串ArrayList的ArrayList,你的代码就可以正常工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接