2016-11-15 3 views
2

Ich brauche jsonapi in Retrofit2. Ich versuche mit moshi-jsonapi, aber ich kann nicht Moshi ConverterFactory verwenden.Wie kann ich Jsonapi in Retrofit2 verwenden?

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

Wenn ich MoshiConverterFactory make Fehler Unable to create converter for class com.xxx.xxx.model.TokenModel!

Verwendung Retrofit:

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

Antwort

6

Von moshi-jsonapi Dokumentation benötigen Sie die Bibliotheken Fabrik auf die moshi Instanz hinzuzufügen:

// 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(); 

Diese den Trick tun sollten.

+0

Vielen Dank. Es ist mit Ihrem Code gelöst. Und ich finde andere [Lösung] (https://github.com/kamikat/moshi-jsonapi/issues/30) gleich Ihre Antwort. –