我正在使用我的json对象返回一个结果数组,我正在尝试使用我的customObjectResponse类来拉出每个对象中的每个字段...它期待一个对象的问题所以我该怎么办编辑我的类,允许它接受一个对象数组,然后可以调用每个对象的字段...我很困惑,需要添加什么:
以下是传递使用内容的响应示例:
[
{
itemId: 'dfsdfsdf343434',
name: 'tests',
picture: '6976-7jv8h5.jpg',
description: 'testy.',
dateUpdated: 1395101819,
}
]
这是我的响应对象类:
public class ObjResponse{
private String itemId;
private String name;
private String picture;
private String description;
private String location;
private int dateUpdated;
private String msg;
//gridview constructor
public ObjResponse(String picture) {
this.picture = picture;
}
//public constructor
public ObjResponse() {
}
public String getItemId() {
return itemId;
}
public void setItemId(String itemId) {
this.itemId = itemId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPicture() {
return picture;
}
public void setPicture(String picture) {
this.picture = picture;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getDateUpdated() {
return dateUpdated;
}
public void setDateUpdated(int dateUpdated) {
this.dateUpdated = dateUpdated;
}
public String getMsg() {
return msg;
}
}
我正在尝试,但是无法正常工作,即使我将这些类分成他们自己的文件:
Data passed in:
items: [{obj1: "A", obj2: ["c", "d"]}, {etc...}]
public class Response {
public class List<Custom> {
private List<Custom> items;
}
public class Custom {
private String obj1;
private List<Obj2> obj2;
}
public Class Obj2 {
private String letters;
}
}
答案 0 :(得分:34)
我最终只是在回调函数中调用了一个customObject列表,并完成了这项工作......
new Callback<List<ObjResponse>>() {
答案 1 :(得分:10)
我最初无法了解OP
如何解决他的问题,但经过几天的调试后我终于想出了如何解决这个问题。
所以你基本上拥有像这样的格式的数据(JSON数组的JSON对象):
[
{
...
}
]
为数据建模并包含getter和setter方法的类只不过是典型的POJO。
public class Person implements Serializable {
@SerializedName("Exact format of your json field name goes here")
private String firstName;
// Getters and Setters....
}
在包含RESTful注释的界面中,您要转换来自:
的电话在:
public interface APInterface {
@GET("SOME URL TO YOUR JSON ARRAY")
Call<Person>(...)
}
后:
public interface APInterface {
@GET("SOME URL TO YOUR JSON ARRAY")
Call<List<Person>>(...)
}
在您的Android活动中,您希望将Call<Person>
形式的所有来电转换为Call<List<Person>>
最后,在进行初始异步请求调用时,您需要转换回调函数。
call.enqueue(new Callback<List<Person>>() {
@Override
public void onResponse(Call<List<Person>> call, Response<List<Person>> response) {
if(response.isSuccessful()){
List<Person> person = response.body();
// Can iterate through list and grab Getters from POJO
for(Person p: person){...}
} else {
// Error response...
}
}
@Override
public void onFailure(Call<List<Person>> call, Throwable t) {...}
});
希望这可以帮助那些因上述接受的答案而迷失的人。
答案 2 :(得分:4)
这也可以通过传递响应对象数组来实现。所以如果这是你的回应对象:
public class CustomUserResponse {
public String firstName;
public String lastName;
...
}
您可以使用相关语法,具体取决于您使用回调的方式。如:
new Callback<CustomUserResponse[]>(){
@Override
public void success(CustomUserResponse[] customUserResponses, Response rawResponse) {
}
@Override
public void failure(RetrofitError error) {
}
};
OR
public class GetUserCommand implements Callback<CustomUserResponse[]> { ...
简单地说,在通常用响应类替换T
的每个地方,将其替换为数组,而不是CustomUserResponse[]
。
注意:为避免混淆错误,请务必在Retrofit
界面定义中使用数组:
@POST ( "/users" )
public void listUsers(@Body GetUsersRequest request, Callback<CustomUserResponse[]> callback);
答案 3 :(得分:2)
你可以试试这样的事情
JSONObject jsonObject = new JSONObject(<your JSON string result>);
JSONArray jsonArray = jsonObject.getJSONArray();
//use GSON to parse
if (jsonArray != null) {
Gson gson = new Gson();
ObjResponse[] objResponse = gson.fromJson(jsonArray.toString(), ObjResponse[].class);
List<ObjResponse> objResponseList = Arrays.asList(objResponse);
}
这绝对有用。