2016-11-15 77 views
2

我需要使用jsonapi進行改造2。我嘗試使用moshi-jsonapi,但我無法使用moshi ConverterFactory。如何在Retrofit2中使用jsonapi?

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)相同的答案。 –