android - 使用 retrofit 2.0 解析嵌套的 json

标签 android json gson retrofit

我有这个 json,我想使用改造来解析它们。

{
  "status": "true",
  "data": [
{
  "id": "1",
  "title": "Hi :)",
  "text": "<p>121212</p>",
  "cat_id": "1",
  "username": "admin",
  "coin": "0",
  "datetime": "1451508880",
  "isShow": "1"
},
{
  "id": "3",
  "title": " Hi :)",
  "text": "Hi :)",
  "cat_id": "2",
  "username": "Hi :)",
  "coin": "20",
  "datetime": "1451508880",
  "isShow": "1"
},
{
  "id": "4",
  "title": "a",
  "text": "someText",
  "cat_id": "1",
  "username": "admin",
  "coin": "10",
  "datetime": "1451982292",
  "isShow": "1"
}
  ]
}

当该 json 处于数组模式时,我的代码可以正常工作。但我的问题是如何像上面的示例一样解析嵌套的 json?

这里是我的 javaClass: (statusClass)

public class retroStatus {

@SerializedName("status")
private String status;

@SerializedName("data")
private ArrayList<retroPost> data;

  //getters And Setters
}

(retroPost 类)

public class retroPost {

@SerializedName("id")
private int id;

@SerializedName("title")
private String title;

@SerializedName("text")
private String text;

@SerializedName("cat_id")
private int cat_id;

@SerializedName("datetime")
private long datetime;


 //getters And Setters
}

(getPostInterface)

public interface getPost {
@GET("get/posts/all")
Call<List<retroStatus>> getPost();
}

(和主代码)

  Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://mywebsite.it/api/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    getPost postService = retrofit.create(getPost.class);
    Call<List<retroStatus>> call = postService.getPost();
    Callback<List<retroStatus>> callback = new Callback<List<retroStatus>>() {
        @Override
        public void onResponse(Response<List<retroStatus>> response, Retrofit retrofit) {
            if (response.isSuccess()) {
                for (retroStatus status : response.body()) {
                    Log.e("test", "nowStatusIs: " + status.getStatus());
                }
            } else {
                Log.e("test", "Failed");
            }


        }

        @Override
        public void onFailure(Throwable t) {
            Log.e("test", "onFailure");
        }
    };
    call.enqueue(callback);

现在,当运行应用程序时,会发生 onFailure,但如果主 json 仅在 onejsonArray 中并仅使用 retroPost 进行解析,那工作非常好……我错了什么?
抱歉英语不好...

最佳答案

您的 json 的根节点不是数组,但您将其声明为 List<responseStatus>在界面 getPost .所以你需要使用 responseStatus而不是当前的。并使用 gettter 访问 data

@SerializedName("data")
private ArrayList<retroPost> data;

这是数组

关于android - 使用 retrofit 2.0 解析嵌套的 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34621240/

相关文章:

php - 如何从服务器获取JSon到ListView?

android - 计算与作为 2D 线段的倾斜或倾斜墙碰撞后移动球的角度

c# - 如何在 C# 中从 payfort Apis 获取 json 结果

arrays - NodeJS fs - 无法读取外部 json 文件

java - 如何将android volley gson请求解析为对象列表/集合

java - 在java中使用哈希表创建json数组

android - Exoplayer 2 Player 无法恢复播放

即使在应用程序关闭时 Internet 可用时 Android 检测网络更改

ios - 如何使用 Sync 将 JSON 解析为与其自身有关系的实体?

java - GSON 自动将 JSON 数组解包为 Java 对象