这是我的Json
[
{
"nata_center":{
"id":67,
"nata_center_name":"Primo Institute of Design"
}
},
{
"nata_center":{
"id":68,
"nata_center_name":"Sai Ganesh Institute"
}
}
]
Pojo课程
public class Explorer {
NataCenter nataCenter;
public NataCenter getNataCenter() {
return nataCenter;
}
public void setNataCenter(NataCenter nataCenter) {
this.nataCenter = nataCenter;
}
}
2)
public class NataCenter {
public String id;
public String nata_center_name;
public NataCenter(String id,String nata_center_name)
{
this.id=id;
this.nata_center_name=nata_center_name;
}
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
public String getNata_center_name() {
return nata_center_name;
}
public void setNata_center_name(String nata_center_name) {
this.nata_center_name = nata_center_name;
}
}
GetMethhodinRetrofit
void getCenter(@Query("id") int id,Callback<List<Explorer>> callback);
MainActvitiy.java
service.getCenter(i,new Callback<List<Explorer>>() {
@Override
public void success(List<Explorer> o, Response response) {
Log.d(TAG,"Success" + "Response"+o.toString());
@Override
public void failure(RetrofitError error) {
Log.d(TAG,"Failed"+error.toString());
}
});
这是错误消息
Failedretrofit.RetrofitError: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
答案 0 :(得分:7)
基本上问题是你在json中有root数组。您必须创建将用作此列表的容器的对象和此对象的反序列化器。我使用Explorer作为容器,它看起来如下:
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);