Esempi di Gson con Retrofit
/* ------- InterfaceName.java ------- */
public interface InterfaceName {
// vedi output del json a fine file
@GET("pathToJsoan")
Call<ResponseBody> getAll (); // prendi tutto
Call<listOfNumbers[]> getnumerbers(); // prendi JsonArray chiamato listOfNumbers
Call<listOfStrings[]> getStrings(); // prendi JsonArray "nested" chiamato listOfStrings
}
/* altrove nel progetto istanzia Retrofit per getAll() */
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("www.site.com")
.build();
/* altrove nel progetto istanzia Retrofit per getnumerbers() */
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("www.site.com")
.addConverterFactory(GsonConverterFactory.create())
.build();
/* altrove nel progetto istanzia Retrofit per getStrings() */
Gson gson = new GsonBuilder().registerTypeAdapter(MyObj[].class, new MyDeserializer()).create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("www.site.com")
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
/* ------- MyDeserializer.java ------- */
public class MyDeserializer implements JsonDeserializer<MyObj[]>{
@Override
public MyObj[] deserialize(JsonElement je, Type type, JsonDeserializationContext jdc){
JsonElement data = je.getAsJsonObject().get("data");
JsonElement filters = data.getAsJsonObject().get("filters");
JsonElement listOfStrings = filters.getAsJsonObject().get("listOfStrings");
// Deserialize it. You use a new instance of Gson to avoid infinite recursion to this deserializer
return new Gson().fromJson(listOfStrings, type);
}
}
/* ------- Example.json ------- */
{
"data":{
"filters":{
"listOfStrings":[
{
"value":"my string"
},
{
"value":"another string"
}
]
}
},
"listOfNumbers":[
{
"value":0
},
{
"value":0
}
]
}