How To Use Autovalue With Retrofit 2?
Solution 1:
[update] The library have changed a bit, check more here: https://github.com/rharter/auto-value-gson
I was able to make it work like this. I hope it will help you.
Import in your gradle app file
apt 'com.ryanharter.auto.value:auto-value-gson:0.3.1'
Create object with autovalue:
@AutoValuepublicabstractclassSignIn { @SerializedName("signin_token")publicabstract String signinToken(); @SerializedName("user")publicabstract Profile profile(); publicstatic TypeAdapter<SignIn> typeAdapter(Gson gson) { returnnewAutoValue_SignIn.GsonTypeAdapter(gson); } }
Create your Type Adapter Factory (Skip if using version > 0.3.0)
publicclassAutoValueGsonTypeAdapterFactoryimplementsTypeAdapterFactory { public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) { Class<? super T> rawType = type.getRawType(); if (rawType.equals(SignIn.class)) { return (TypeAdapter<T>) SignIn.typeAdapter(gson); } returnnull; } }
Create your Gson converter with your GsonBuilder
GsonConverterFactorygsonConverterFactory= GsonConverterFactory.create( newGsonBuilder() .registerTypeAdapterFactory(newAutoValueGsonTypeAdapterFactory()) .create());
Add it to your retrofit builder
Retrofitretrofit=newRetrofit .Builder() .addConverterFactory(gsonConverterFactory) .baseUrl("http://url.com/") .build()
Do your request
- Enjoy
Bonus live template: In your autovalue class, type avtypeadapter then autocomplete to generate the type adapter code. To work you need to add this as a live template in Android Studio.
public static TypeAdapter<$class$> typeAdapter(Gson gson) {
return new AutoValue_$class$.GsonTypeAdapter(gson);
}
How to create and use the live template.
Solution 2:
Here's a Gist by Jake Wharton for a Gson TypeAdapterFactory that just requires you add an annotation to all of your AutoValue classes that require working with Gson https://gist.github.com/JakeWharton/0d67d01badcee0ae7bc9
Works great for me.
Here's some proguard help too..
-keep class **.AutoValue_*
-keepnames @yourpackage.AutoGson class *
Post a Comment for "How To Use Autovalue With Retrofit 2?"