【问题标题】:Null pointer access: The variable data can only be null at this location空指针访问:变量数据在该位置只能为空
【发布时间】:2012-04-22 13:48:03
【问题描述】:

好的,这就是我所拥有的:

        String[] data = null;
    String[] data2 = null;
    String[] datas = res.split("(s1)");
    int i1 = 0;
    int i2 = 0;
    for(String datasx : datas)
    {
        i1++;
        String[] datas2 = datasx.split("(s2)");

        for(String datas2x : datas2)
        {
            String[] odcinek = datas2x.split("(s3)");
            data[i2] = odcinek[1] + "////" + odcinek[2] + "////" + odcinek[6];
            i2++;
        }
    }

而且它不起作用。应用程序在此行崩溃:

data[i2] = odcinek[1] + "////" + odcinek[2] + "////" + odcinek[6];

实际上,Eclipse 给了我以下警告:

空指针访问:该位置的变量数据只能为空

但我不知道出了什么问题。有人可以帮忙吗?谢谢。

【问题讨论】:

  • data 数组被初始化为 null 并且它永远不会被分配另一个值。数组本身为空,因此您不能为该数组中的成员分配值,例如:data[i2] = ...
  • 这里的问题不是 NPE 本身,而是您需要学习检查导致 NPE 的行上的所有变量,只要您通过回溯代码并查看每个变量的位置来获得一个变量初始化。这样做是一种反射,下一次,答案对你来说应该是显而易见的。我删除了下面的答案,以帮助减少“答案混乱”。

标签: java android eclipse


【解决方案1】:

似乎您需要动态列表,所以您需要替换 String[] data = null; 以使用 List

List data = new ArrayList<String>();
String[] data2 = null;
String[] datas = res.split("(s1)");
         
int i1 = 0;
int i2 = 0;
     
for (String datasx : datas) {
    i1++;
    String[] datas2 = datasx.split("(s2)");

    for (String datas2x : datas2) {
        String[] odcinek = datas2x.split("(s3)");
        data.add(odcinek[1] + "////" + odcinek[2] + "////" + odcinek[6]);
        i2++;
    }
}

【讨论】:

  • App 仍然是 FC。仍然在同一行 (data.add(...))。
  • 然后确保odcinek[1] + "////" + odcinek[2] + "////" + odcinek[6] 没有抛出错误。尤其是odcinek[6]
【解决方案2】:

您正在将数组数据初始化为空,当您尝试访问它时会出现空指针访问错误。

您必须在尝试访问它之前将其初始化为适当的类型,即将其初始化为 String[] 而不是 null。

【讨论】:

    【解决方案3】:

    您需要初始化“数据”变量。此时为空。

    请尝试以下方法

    String[] datas2 = datasx.split("(s2)");
    data = new String[datas2.length];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      相关资源
      最近更新 更多