为什么我的代码从嵌套的JSON数组返回'null'的值

时间:2017-11-01 21:36:57

标签: java android json api android-volley

所以我试图获得'lineSeatty'里面的'statusSeveretyDescription'。然而,第一个'for'循环工作,嵌套循环返回null ..非常感谢正确方向的指针。请参阅下面的代码和JSON图像。

JSONArray array = new JSONArray(response);
for (int i = 0; i < array.length(); i++) {

    JSONObject object = array.optJSONObject(i);
    String line = object.optString("id");

    //nested array
    JSONArray arrayStatus = object.getJSONArray("lineStatuses");
    int len = arrayStatus.length();

    for (int j = 0; j < len; j++) {                                
        JSONObject o = arrayStatus.getJSONObject(j);
        String statusSeverityDescription = o.optString(
                                            "statusSeverityDescription", "");
    }

    if (line != null) {
        tubeLines.add(line  + statusSeverityDescription);
    }

    // Once we added the string to the array, we notify the arrayAdapter
    arrayAdapter.notifyDataSetChanged();
}

enter image description here

1 个答案:

答案 0 :(得分:2)

你有2个问题。

1)您的变量范围不正确,只要for循环结束,您的statusSeverityDescription变量就会被释放。要解决此问题,请将String statusSeverityDescription移到for循环之外,如此

String statusSeverityDescription;
for (int j = 0; j < len; j++) {                                
   JSONObject o = arrayStatus.getJSONObject(j);
   statusSeverityDescription = o.optString(
                                        "statusSeverityDescription", "");
}

2)statusSeverityDescription应该是一个存储json有效负载中所有statusSeverityDescription的数组。因此,请将其设为数组,或者了解给定statusSeverityDescription的上次处理lineStatuses将是您留下的statusSeverityDescription