this is my Json
[
{
\"nata_center\":{
\"id\":67,
\"nata_center_name\":\"Primo Institute of Design\"
}
},
{
\"nata_center\":{
Basically the problem is that you have array as root in json. You have to create object which will be used as container for this list and deserializator for this object. I used Explorer as container, it looks like below:
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);
}
}
My solution is just explanation. You can improve your Explorer
class. Setter for list is not the best idea.
The NataCenter class looks like previous,
The one of important think is ExplorerDeserializerJson
class. It is used to deserialize json and it looks like below:
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;
}
}
Additionally I change your client. Now Explorer
is a response.
void getCenter(@Query("id") int id,Callback<Explorer> callback);
As the last you have to register new deserializer in the place where you create RestAdapter as is shown below:
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);