当条件等于 25 时,for 循环只打印一次 String

For loop printing String only once when the condition is equal to 25

我正在尝试使用 Facebook Graph API 在 JSON 中打印出一个对象。

这是我的代码:

try{
    JSONArray data = innerJson.getJSONArray("data");
    Log.d("innerDataLength", String.valueOf(data.length()));

    for (int i = 0; i<data.length(); i++) {
        String message = data.getJSONObject(i).getString("message");
        Log.d("message", message);
    }
} catch (JSONException e) {
    Log.d("exception", e.getMessage());
}

这是输出:

D/innerDataLength: 25
D/message: "blah blah blah"
D/exception: No value for message

如您所见,conditiondata.length() 是 25 那么为什么我只打印一次消息?

请注意,您遇到了一个例外:

D/exception: No value for message

表示JSONArray中的第二个对象没有message属性。看起来是可选的,所以你需要先检查 message 属性 是否存在。

更新:

try{
    JSONArray data = innerJson.getJSONArray("data");
    Log.d("innerDataLength", String.valueOf(data.length()));

    for (int i = 0; i < data.length(); i++) {
        JSONObject obj = data.getJSONObject(i);
        if (obj.has("message")) {
            String message = obj.getString("message");
            Log.d("message", message);
        }
        if (obj.has("story")) {
            String story= obj.getString("story");
            Log.d("story", story);
        }
    }
} catch (JSONException e) {
    Log.d("exception", e.getMessage());
}

innerJson.getJSONArray("data") 数组中的某些对象没有消息

检查我说的注释循环内的行并打印我将得到 0 到 24

避免用try和catch包围解析message的语句,避免解析不包含message的对象

你也可以打印data.getJSONObject(i).toString 来查看解析对象