我在项目中使用retrofit和gson。 答案来自服务器,格式为
{
1:"user1",
2: "user2"
}
我有结构pojo
public class User {
@Expose
@Getter
@Setter
private int uid;
@Expose
@Getter
@Setter
private String nick;}
请求改造
@Get("/")
User getPojousers();
但是回应动态密钥。如何描述响应类?
答案 0 :(得分:0)
您必须自己解析Users
课程(以SparseArray
为例):
public static class Users implements JsonDeserializer<User> {
public SparseArray<String> values = new SparseArray<>();
@Override
public Users deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
Users u = new Users();
if (json.isJsonObject()) {
JsonObject obj = (JsonObject) json;
for (Map.Entry<String, JsonElement> elem : obj.entrySet()) {
if (Util.isInteger(elem.getKey())) {
u.values.put(Integer.parseInt(elem.getKey()), elem.getValue().getAsString());
}
}
}
return u;
}
}
要完成此项工作,请将TypeAdapter添加到Gson
实例:
private static GsonConverter getConverter() {
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Users.class, new Users());
return new GsonConverter(builder.create());
}
在RestAdapter
实例中使用此转换器:
mInstance = new RestAdapter
.Builder()
.setConverter(getConverter())
.//
.create(...)
答案 1 :(得分:0)
这是一个自定义适配器,它将返回该对象的用户列表。 (你可能需要修复json,使其有效,首先)
@Override
public List<User> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
List<User> result = new ArrayList<>();
for (Map.Entry<String, JsonElement> elem : json.getAsJsonObject().entrySet()) {
result.add(new User(Integer.parseInt(elem.getKey()), elem.getValue()));
}
return result;
}
当然,你的User
课程需要一个带有这两个参数的构造函数。