Skip to content Skip to sidebar Skip to footer

How To Use Autovalue With Retrofit 2?

I've got AutoValue (and the android-apt plugin) working in a project, and I'm aware of Ryan Harter's gson extension for AutoValue, but how do I hook Retrofit 2 up to use the extens

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);
}

Live template configuration

How to create and use the live template.

Live template gif

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?"