JSON异常 - 对于有用参数没有值

时间:2017-08-06 03:21:27

标签: java android json listview jsoup

我正在Android平台上开发一个应用程序,它将youtube视频搜索结果作为JSON格式,并将标题,频道名称和缩略图URL放入列表视图中。我还应该补充一点,我正在使用jsoup库来安装android。我正在连接到包含JSON响应的URL,并尝试使用该响应中的值并将它们应用于列表视图。 这是方法。

public void initSearch(String searchQuery) {
    String url = "https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=1&order=rating&q=" + searchQuery + "&key=MY_GOOGLE_API_KEY";

    try {
        Document doc = Jsoup.connect(url).ignoreContentType(true).timeout(10 * 1000).get();
        String getJson = doc.text();

        try{
            JSONObject jsonObject = (JSONObject) new JSONTokener(getJson).nextValue();

            String videoId = jsonObject.getString("videoId");
            String thumbnail = "http://img.youtube.com/vi/" + videoId + "/mqdefault.jpg";
            String title = (String)jsonObject.get("title");
            String channelTitle = (String)jsonObject.get("channelTitle");

            VideoDetails videoDetails = new VideoDetails(thumbnail, title,channelTitle,"6,900" );
            searchedList.add(videoDetails);
        } catch (JSONException e){ 
            e.printStackTrace();
        }
    } catch (IOException e){
        e.printStackTrace();
    }
}

Here就是我所连接的网页的样子。

我已经检查过它是否是有效的JSON格式,是的是。

现在的问题是,我的列表视图中实际上没有添加任何内容。调用此方法时,我收到一个如下所示的错误。

W/System.err: org.json.JSONException: No value for videoId 

任何人都知道最近发生了什么?提前谢谢。

1 个答案:

答案 0 :(得分:2)

videoId是JSON中的子元素,因此您需要遍历JSON才能获得它。

糟糕的方式(注意硬编码索引):

String videoID = (String) ((JSONObject) ((JSONObject) jsonObject.getJSONArray("items").get(0)).get("id")).get("videoId");
System.out.println(videoID);

首选方式:

Iterator<?> keys = jsonObject.keys();

/* Iterate over all the elements and sub-elements and assign as 
 * needed. Based on the type you can concert each item to a JSONObject or 
 * JSONArray, etc.
 */
while (keys.hasNext()) {
    String key = (String) keys.next();

    System.out.println(key + "\t" + jsonObject.get(key) + "\t" + jsonObject.get(key).getClass());
}