基本上问题是你将数组作为 json 中的根。您必须创建将用作该列表的容器和该对象的反序列化器的对象。我使用资源管理器作为容器,如下所示:
public class Explorer {
List<NataCenter> nataCenter;
public List<NataCenter> getNataCenter() {
return nataCenter;
}
public void add(NataCenter nataCenterItem){
if(nataCenter == null){
nataCenter = new LinkedList<>();
}
nataCenter.add(nataCenterItem);
}
}
我的解决方案只是解释。你可以改善你的Explorer
班级。列表的设置器不是最好的主意。
NataCenter 类看起来像以前的,
重要的想法之一是ExplorerDeserializerJson
班级。它用于反序列化json,如下所示:
public class ExplorerDeserializerJson implements JsonDeserializer<Explorer> {
@Override
public Explorer deserialize(JsonElement je, Type type, JsonDeserializationContext jdc)
throws JsonParseException {
Explorer explorer = new Explorer();
JsonArray jsonArray = je.getAsJsonArray();
Gson gson = new Gson();
for(JsonElement element : jsonArray){
JsonObject jsonObject = element.getAsJsonObject();
NataCenter nataCenter = gson.fromJson(jsonObject.get("nata_center"), NataCenter.class);
explorer.add(nataCenter);
}
return explorer;
}
}
另外我改变了你的客户。现在Explorer
是一个回应。
void getCenter(@Query("id") int id,Callback<Explorer> callback);
最后,您必须在创建 RestAdapter 的位置注册新的反序列化器,如下所示:
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(BuildConfig.IP)
.setConverter(new GsonConverter(new GsonBuilder()
.registerTypeAdapter(Explorer.class, new ExplorerDeserializerJson())
.create()))
.build();
restAdapter.create(CenterClient.class).getCenter(1);