【问题标题】:Android Json Parsing from html with Volley no value found使用Volley从html解析Android Json没有找到值
【发布时间】:2018-11-29 19:40:15
【问题描述】:

我正在尝试使用 Volley 在我的项目中解析 json html。 Json 看起来像这样:

这是我的代码块:

                public void onResponse(JSONObject response) {
                try {
                    JSONArray jsonArray = response.getJSONArray("channels");

                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject channel = jsonArray.getJSONObject(i);

                        String song = channel.getString("song");
                        String artist = channel.getString("age");
                        int duration = channel.getInt("duration");
                        double playedat = channel.getDouble("playedat");
                        String img = channel.getString("image_extralarge");

                        System.out.println(song + ", " + String.valueOf(duration) + ", " + img + "\n\n");
                    }

但每当我运行我的代码时,都会出现以下错误:

W/System.err: org.json.JSONException: No value for channels
        at org.json.JSONObject.get(JSONObject.java:392)
W/System.err:     at org.json.JSONObject.getJSONArray(JSONObject.java:587)
        at com.example.korhan.frontend.MainActivity$2.onResponse(MainActivity.java:71)
        at com.example.korhan.frontend.MainActivity$2.onResponse(MainActivity.java:67)
        at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:90)
        at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)

【问题讨论】:

  • 看起来您的元素不在数组中。这就是无法转换为 JSONArray 的原因。
  • 你知道如何解析它们吗? @AnxGotta
  • 我在@K 下面为您发布了一个可能的解决方案。凯瑟

标签: android json android-studio android-volley


【解决方案1】:

因为您的回复不是JSONArray,您必须将您的回复转换为JSONObject,然后按名称引用每个子对象。

我建议您使用这些值进行迭代并做您想做的事情:

public void onResponse(JSONObject response) {

    Iterator<String> iterator = response.keys();

    while (iterator.hasNext() {
        String channelName = iterator.next().toString();
        JSONObject channelObject = new JSONObject(response.get(channelName).toString()));
        String song = channelObject.getString("song");
        /// do other things... getString, getInt
    }
}

在这里查看更多get 方法=> JSONObject Methods

【讨论】:

  • 如果解决方案对您有用,请记住将其标记为已接受,以便理解为已关闭。
猜你喜欢
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
相关资源
最近更新 更多