首先,我是 JSON 和 GSON 的初学者,所以请多多包涵。
我想读取从这个链接中检索到的数据:
https://gdata.youtube.com/feeds/api/videos?author=radityadika&v=2&alt=jsonc
所以我尝试创建一些类来表示上面链接的结果:
Video.java
public class Video implements Serializable {
// The title of the video
@SerializedName("title")
private String title;
// A link to the video on youtube
@SerializedName("url")
private String url;
// A link to a still image of the youtube video
@SerializedName("thumbUrl")
private String thumbUrl;
@SerializedName("id")
private String id;
public Video(String id, String title, String url, String thumbUrl) {
super();
this.id = id;
this.title = title;
this.url = url;
this.thumbUrl = thumbUrl;
}
/**
* @return the title of the video
*/
public String getTitle(){
return title;
}
/**
* @return the url to this video on youtube
*/
public String getUrl() {
return url;
}
/**
* @return the thumbUrl of a still image representation of this video
*/
public String getThumbUrl() {
return thumbUrl;
}
public String getId() {
return id;
}
}
库.java
public class Library implements Serializable{
// The username of the owner of the library
@SerializedName("user")
private String user;
// A list of videos that the user owns
private List<Video> videos;
public Library(String user, List<Video> videos) {
this.user = user;
this.videos = videos;
}
/**
* @return the user name
*/
public String getUser() {
return user;
}
/**
* @return the videos
*/
public List<Video> getVideos() {
return videos;
}
}
之后,我尝试使用这些代码检索数据:
@Override
public void run() {
try {
// Get a httpclient to talk to the internet
HttpClient client = new DefaultHttpClient();
// Perform a GET request to YouTube for a JSON list of all the videos by a specific user
HttpUriRequest request = new HttpGet("https://gdata.youtube.com/feeds/api/videos?author="+username+"&v=2&alt=jsonc");
//HttpUriRequest request = new HttpGet("https://gdata.youtube.com/feeds/api/videos?title="+username+"&v=2&alt=jsonc");
// Get the response that YouTube sends back
HttpResponse response = client.execute(request);
// Convert this response into a readable string
//String jsonString = StreamUtils.convertToString(response.getEntity().getContent());
final int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
//Log.w(getClass().getSimpleName(), "Error " + statusCode);
}
// Create a JSON object that we can use from the String
//JSONObject json = new JSONObject(jsonString);
HttpEntity getResponseEntity = response.getEntity();
InputStream httpResponseStream = getResponseEntity.getContent();
Reader inputStreamReader = new InputStreamReader(httpResponseStream);
Gson gson = new Gson();
this.library = gson.fromJson(inputStreamReader, Library.class);
} catch (Exception e) {
Log.e("Feck", e);
}
}
但是我无法检索数据。 this.library
变量,它是 Library Class
的实例,始终为 null。
感谢任何帮助,如果您需要更多代码,请询问我。
非常感谢
最佳答案
好的,我可以理解您对 JSON 和 Gson 没有任何了解...但是您是否至少快速浏览了一下 JSON specifications或 Gson documentation ?
看了一会儿,我建议你使用这个方便的在线JSON Viewer以用户友好的方式查看您正在检索的 JSON 数据。您只需在文本选项卡中复制整个 JSON,然后单击查看器选项卡...
如果你这样做,你会看到你的 JSON 的结构,它是这样的:
{
...
"data": {
...
"items": [
{
"id": "someid",
"title": "sometitle",
...
},
...
]
}
}
现在,您要做的是创建一个代表您的 JSON 数据结构的 Java 类结构,而您没有这样做!为什么要将属性 user
和 videos
添加到 Library
类中?您是否认为 Gson 可以神奇地理解您要检索用户及其视频?真的不是那样的……
为了创建合适的类结构,从做这样的事情开始(在伪代码中):
class Response
Data data;
class Data
List<Item> items;
class Item
String id;
String title;
因为您现在可能已经意识到,这个类结构确实代表了您的 JSON 数据!然后根据您要检索的数据添加更多的类和属性(只添加那些您需要检索的类和属性,其余的将自动跳过)。
关于java - 如何在 Android 应用程序中使用 GSON 从 Youtube API 读取 JSON-c 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19007173/