mpao
5/31/2017 - 2:25 PM

Esempi di Gson con Retrofit

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
                
        }
    ]
}