【发布时间】:2017-07-22 11:53:55
【问题描述】:
在我开始之前,我想为重复这个问题而道歉,但我只是想更好地了解这是如何工作的,因为我环顾四周,但无法找到与我的 JSON 响应相关的答案。
这是我尝试使用 Retrofit2 读取的 JSON 响应。 (https://www.reddit.com/r/popular.json)
{
kind: "Listing",
data: {
modhash: "9nsu2iqwupcf7d47e57c6f70795c9fde52e5566bf8b7731884",
children: [
{
kind: "t3",
data: {}
},
{
kind: "t3",
data: {}
},
{
kind: "t3",
data: {}
},
And so on...
我是编程新手,过去曾与 Retrofit 合作过我的几个小项目。在那些项目中,我可以轻松地下载数据,就像我在开始时遇到的 Array 一样,但在这种情况下,它是 Object。
我刚刚使用 POJO 更新了类以创建 JSON 响应结构,但在进入调试模式后它仍然没有返回任何内容。如果您需要任何进一步的信息,请告诉我。非常感谢你们的帮助
public void getPopularPost() {
popularPosts = new ArrayList<>();
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("https://www.reddit.com/")
.build();
FromAPI fromAPI = retrofit.create(FromAPI.class);
final Call<Rootobject> call = fromAPI.getPopularPosts();
call.enqueue(new Callback<Rootobject>() {
@Override
public void onResponse(Call<Rootobject> call, Response<Rootobject> response) {
response.body();
}
@Override
public void onFailure(Call<Rootobject> call, Throwable t) {
}
});
}
================================================ ==============================
public interface FromAPI {
@GET("r/popular.json")
Call<Rootobject> getPopularPosts();
}
================================================ ==============================
public class Rootobject {
private String kind;
private Data data;
}
public class Data {
private String modhash;
private ArrayList<Child> children;
// private String after;
// private Object before;
}
public class Child {
private String kind;
private Data2 data;
}
public class Data2 {
private String domain;
private String author;
private String title;
private int num_comments;
private int ups;
private String url;
}
【问题讨论】:
-
您的 pojo 类不包含 json 响应的结构。
-
感谢 Manoj 的回复,但在这种情况下,您能向我解释一下 pojo 结构吗?这就是我想要弄清楚的。我有一个这样的小想法:- ResponseHandle 类与字符串类型和字符串数据,儿童类与字符串 modhash 和 ArrayList
children -
json2java.azurewebsites.net 使用此站点从 url 响应生成 pojo 类。这将使您找到解决方案。
-
你给
response.body()打了电话,却什么也没做……你为什么期待那里会发生什么? -
在调试模式下,我在 response.body() 上放了一个断点,看它是否包含任何内容,但它跳过了方法,我似乎无法定位问题