【问题标题】:Arraylist of arraylist in method方法中arraylist的arraylist
【发布时间】:2012-05-18 22:14:44
【问题描述】:

试图让一个包含数组列表的数组列表在我的程序中工作时遇到问题,我收到一个奇怪的警告说:将@SuppressWarnings“null”添加到 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;

【问题讨论】:

  • 学会阅读错误,异常通常有一个名字,还有一个行号。

标签: java android arraylist


【解决方案1】:

你从来没有真正初始化这些数组列表中的任何一个。

你想要

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

此外,永远不要抑制“只是为了让代码正常工作”的警告。仅当您确切知道它们出现的原因以及您选择忽略它们的确切原因时才抑制它们。

【讨论】:

  • 哇,我知道这完全是愚蠢的!感谢您的帮助!
【解决方案2】:

您的程序可能由于NullPointerException 而崩溃。当您尝试访问值为null 的变量时会发生这种情况(称为取消引用空指针)。在访问两个ArrayLists 中的任何一个之前,您需要对其进行初始化。尝试将这两行更改为:

  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 变量。这样,范围更有限,代码运行更符合逻辑。

【讨论】:

    【解决方案3】:

    您正在尝试将 innerArrays 变量添加到您的主 ArrayList 中,但您在方法的开头已将您的主 ArrayList 声明为 null。将主 ArrayList 初始化为新的 ArrayList of ArrayLists of Strings,您的代码应该可以工作。

    【讨论】:

      猜你喜欢
      • 2014-04-23
      • 2013-07-06
      • 2014-05-04
      • 2014-08-20
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      相关资源
      最近更新 更多