我正在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
任何人都知道最近发生了什么?提前谢谢。
答案 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());
}