如何将AutoValue与Retrofit 2一起使用?

时间:2016-04-10 11:40:50

标签: android retrofit2 auto-value

我已经在一个项目中使用了AutoValue(和android-apt插件),并且我知道Ryan Harter对AutoValue的gson扩展,但是我如何挂起Retrofit 2在抽象类上使用扩展名和工厂方法?

apps.twitter.com

例如,我想将AutoValue与SignIn JSON模型对象一起使用以强制实现不变性但是如何将Retrofit(或者更具体地说是Gson)连接到不可变的AutoValue模型类?

2 个答案:

答案 0 :(得分:26)

[更新]图书馆发生了一些变化,请点击此处查看:https://github.com/rharter/auto-value-gson

我能够让它像这样工作。我希望它会对你有所帮助。

  • 导入您的gradle app文件

    apt 'com.ryanharter.auto.value:auto-value-gson:0.3.1'

  • 使用autovalue创建对象:

    @AutoValue public abstract class SignIn {    
        @SerializedName("signin_token") public abstract String signinToken();
        @SerializedName("user") public abstract Profile profile();
    
        public static TypeAdapter<SignIn> typeAdapter(Gson gson) {
            return new AutoValue_SignIn.GsonTypeAdapter(gson);
        }
    }
    
  • 创建类型适配器工厂(如果使用版本&gt; 0.3.0则跳过)

    public class AutoValueGsonTypeAdapterFactory implements TypeAdapterFactory {
    
        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);
            } 
    
            return null;
        }
    }
    
  • 使用您的GsonBuilder创建您的Gson转换器

    GsonConverterFactory gsonConverterFactory = GsonConverterFactory.create(
            new GsonBuilder()
                    .registerTypeAdapterFactory(new AutoValueGsonTypeAdapterFactory())
                    .create());
    
  • 将其添加到改装构建器

    Retrofit retrofit = new Retrofit
            .Builder()
            .addConverterFactory(gsonConverterFactory)
            .baseUrl("http://url.com/")
            .build()
    
  • 请求

  • 享受

加分实时模板:
在autovalue类中,键入avtypeadapter然后自动完成以生成类型适配器代码。要开始工作,您需要将其添加为live template in Android Studio

public static TypeAdapter<$class$> typeAdapter(Gson gson) {
    return new AutoValue_$class$.GsonTypeAdapter(gson);
}

Live template configuration

如何创建和使用实时模板。

Live template gif

答案 1 :(得分:2)

这是Jake Wharton对Gson TypeAdapterFactory的一个要点,它只需要为需要使用Gson的所有AutoValue类添加注释 https://gist.github.com/JakeWharton/0d67d01badcee0ae7bc9

非常适合我。

这里也有一些帮助......

-keep class **.AutoValue_*
-keepnames @yourpackage.AutoGson class *