2016-11-15 7 views
2

Мне нужно использовать jsonapi в retrofit2. Я стараюсь с moshi-jsonapi, но я не могу использовать moshi ConverterFactory.Как использовать jsonapi в Retrofit2?

TokenModel.java

@JsonApi(type = "tokens") 
public class TokenModel extends Resource { 
    @Json(name = "cell_phone") 
    public String cellPhone; 
} 

TestService.java:

public interface TestService { 
    @POST("token") 
    Call<TokenModel> newOtp(@Body TokenModel tokenModel); 
} 

TestProvider.java:

public class TestProvider { 
    private TestService testService; 

    public TestProvider() { 
     OkHttpClient httpClient = new OkHttpClient(); 
     Retrofit refRetrofit = new Retrofit.Builder() 
       .baseUrl(ClientConfigs.BASE_URL) 
       .client(httpClient) 
       .addConverterFactory(MoshiConverterFactory.create()) 
//    .addConverterFactory(????????????????????????????) 
       .build(); 
     testService = refRetrofit.create(TestService.class); 
    } 

    publicTestService getTestService() { 
     return testService; 
    } 
} 

Если я использую MoshiConverterFactory грим ошибку Unable to create converter for class com.xxx.xxx.model.TokenModel!

Использование дооснащения:

TsetProvider testProvider = new TestProvider(); 
TestService testService = testProvider.getTestService(); 

TokenModel tokenModel = new TokenModel(); 
tokenModel.cellPhone = "121212129999"; 

Call<TokenModel> call = testService.newOtp(tokenModel); 
call.enqueue(new Callback<TokenModel>() { 
    @Override 
    public void onResponse(Call<TokenModel> call, Response<TokenModel> response) { 
    } 

    @Override 
    public void onFailure(Call<TokenModel> call, Throwable t) { 
    } 
}); 

ответ

6

Из moshi-jsonapi документации необходимо добавить фабрику библиотеки в Моши Например:

// First create the factory 
JsonAdapter.Factory jsonApiAdapterFactory = ResourceAdapterFactory.builder() 
    .add(TokenModel.class) 
    .build(); 

// Create a custom moshi instacne 
Moshi moshi = new Moshi.Builder() 
    .add(jsonApiAdapterFactory) 
    .build(); 

// Add the custom moshi instance to Retrofits Converter Factory 
Retrofit refRetrofit = new Retrofit.Builder() 
    .baseUrl(ClientConfigs.BASE_URL) 
    .client(httpClient) 
    .addConverterFactory(MoshiConverterFactory.create(moshi)) 
    .build(); 

Это должно сделать трюк.

+0

спасибо. Это разрешено с вашим кодом. И я нахожу другое [решение] (https://github.com/kamikat/moshi-jsonapi/issues/30) тот же самый ответ. –

Смежные вопросы