将Retrofit 2.0与Autovalue一起使用

时间:2016-10-07 16:52:08

标签: android rest retrofit2 auto-value gson

我正在尝试使用here

中的AutoValue库

我使用Retrofit 2.0进行Web服务调用,所有Web服务请求都因HTTP请求错误400而失败。通过进一步调查我知道我必须设置TypeAdapterFactory并将其传递给Retrofit Builder

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

此答案可在How to use AutoValue with Retrofit 2?

处找到

但是那里使用的gsonConverterFactory就像

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

}

正在使用rawType.equals(SignIn.class),所以我的问题是,有没有办法制作AutoValueGsonTypeAdapterFactory的通用版本,或者我必须为每个网络服务请求创建单独的AutoValueGsonTypeAdapterFactory DTO ??

提前致谢

1 个答案:

答案 0 :(得分:0)

  

为您的所有auto-value-gson生成TypeAdapterFactory   类,只需创建一个实现的抽象类   TypeAdapterFactory并使用@GsonTypeAdapterFactory注释它,和   auto-value-gson将为您创建一个实现。你只需要   提供静态工厂方法,就像你的AutoValue类一样,   并且您可以使用生成的TypeAdapterFactory来帮助Gson   de /序列化您的类型。

from gson extension documentation

创建以下工厂方法来处理

@GsonTypeAdapterFactory
public abstract class MyAdapterFactory implements TypeAdapterFactory {

  // Static factory method to access the package
  // private generated implementation
  public static TypeAdapterFactory create() {
    return new AutoValueGson_MyAdapterFactory();
  }

}

注册工厂实例:

GsonConverterFactory gsonConverterFactory = GsonConverterFactory.create(
                new GsonBuilder()
                        .registerTypeAdapterFactory(AutoValueGsonTypeAdapterFactory.create())
                        .create());

然后将其添加到retrofitclient

Retrofit retrofitClient = new Retrofit.Builder()
                .baseUrl(BuildConfig.END_POINT)
                .addConverterFactory(gsonConverterFactory)
                .client(okHttpClient.build())
                .build();