2016-10-07 6 views
2

Я пытаюсь использовать библиотеку Автозначение из hereИспользование Дооснащение 2.0 с Автозначение

Я с помощью Дооснащение 2.0 для вызова веб-службы, запрос все веб-службы получать потерпело неудачу с ошибкой HTTP Request 400. При дальнейшем исследовании я познакомился что я должен установить TypeAdapterFactory и передать его в Модифицированные 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 ??

Заранее спасибо

ответ

0

Для создания TypeAdapterFactory для всех ваших авто-стоимость gson классов, просто создать абстрактный класс, который реализует TypeAdapterFactory и аннотировать его с @GsonTypeAdapterFactory и автоматического значения -gson создаст для вас реализацию. Вам просто нужен , чтобы предоставить статический заводский метод, как и ваши классы AutoValue, , и вы можете использовать сгенерированный TypeAdapterFactory, чтобы помочь Gson дезацинировать ваши типы.

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(); 
Смежные вопросы