Gson:解析对象内部数组中的对象

Gson: parse objects in array inside an object

我正在开发一个 Android 应用程序,使用 Retrofit,并试图解决这个问题。

后台人员直到昨天才给我发了以下回复:

[
    {"id":1,"key1":"value1", "key2":"value2"},
    {"id":2, "key1":"value1", "key2":"value2"}
]

现在,我想把它改成这样:

{"response":
    [
        {"id":1,"key1":"value1","key2":"value2"},
        {"id":2,"key1":"value1","key2":"value2"}
    ],
"page":1,
"count":2
}

所以,基本上,他们向我发送了包含对象的数组 "response",然后是一些关于分页的元数据。

现在,我的问题是:如何使用 Gson 解析它?

目前我的代码是:

POJO:

public class MyObject{

    private int id;
    private String key1;
    private String key2;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getKey1() {
        return key1;
    }

    public void setKey1(String key1) {
        this.key1 = key1;
    }

    public String getKey2() {
        return key2;
    }

    public void setKey2(String key2) {
        this.key2 = key2;
    }
}

改造界面:

public interface Api {

    @GET("/route")
    void listObjects(Callback<List<Object>> callBack);

}

这就是我初始化 Retrofit 的方式:

RestAdapter restAdapter = new RestAdapter.Builder()
        .setEndpoint("http://example.com")
        .setLogLevel(RestAdapter.LogLevel.FULL)
        .build();

api = restAdapter.create(Api.class);

以及我是如何消费它的:

public void getObjects(final Handler handler) {
    api.listObjects(new retrofit.Callback<List<Object>>() {
        @Override
        public void success(List<Object> objects, retrofit.client.Response response) {
            handler.onSuccess(objects);
        }

        @Override
        public void failure(RetrofitError error) {
            handler.onError();
        }
    });
}

所以我想解析它,但我不知道如何使用 Retrofit 和 Gson 来解析它。

提前致谢!

我使用 This 网站生成了这些 pojo。

外层class

package com.example;

import java.util.ArrayList;
import java.util.List;
import javax.annotation.Generated;
import com.google.gson.annotations.Expose;


public class Response {

@Expose
private List<Response_> response = new ArrayList<Response_>();
@Expose
private Integer page;
@Expose
private Integer count;

/**
* 
* @return
* The response
*/
public List<Response_> getResponse() {
return response;
}

/**
* 
* @param response
* The response
*/
public void setResponse(List<Response_> response) {
this.response = response;
}

/**
* 
* @return
* The page
*/
public Integer getPage() {
return page;
}

/**
* 
* @param page
* The page
*/
public void setPage(Integer page) {
this.page = page;
}

/**
* 
* @return
* The count
*/
public Integer getCount() {
return count;
}

/**
* 
* @param count
* The count
*/
public void setCount(Integer count) {
this.count = count;
}

}

内层class

package com.example;

import javax.annotation.Generated;
import com.google.gson.annotations.Expose;

public class Response_ {

@Expose
private Integer id;
@Expose
private String key1;
@Expose
private String key2;

/**
* 
* @return
* The id
*/
public Integer getId() {
return id;
}

/**
* 
* @param id
* The id
*/
public void setId(Integer id) {
this.id = id;
}

/**
* 
* @return
* The key1
*/
public String getKey1() {
return key1;
}

/**
* 
* @param key1
* The key1
*/
public void setKey1(String key1) {
this.key1 = key1;
}

/**
* 
* @return
* The key2
*/
public String getKey2() {
return key2;
}

/**
* 
* @param key2
* The key2
*/
public void setKey2(String key2) {
this.key2 = key2;
}

}

然后 Api 调用如下所示。

public interface Api {

@GET("/route")
void listObjects(Callback<Response> callBack);

}