2016-02-05 47 views
1

如何解决它?改装2 beta-4。 Android 6.无法创建转换器

Process: www.palchiki.com.palchiki, PID: 2047 
java.lang.IllegalArgumentException: Unable to create converter for class www.palchiki.com.palchiki.model.ServiceResponse 
for method APIWebService.getServices 
at retrofit2.Utils.methodError(Utils.java:154) 
at retrofit2.MethodHandler.createResponseConverter(MethodHandler.java:62) 
at retrofit2.MethodHandler.create(MethodHandler.java:33) 
at retrofit2.Retrofit.loadMethodHandler(Retrofit.java:164) 
at retrofit2.Retrofit$1.invoke(Retrofit.java:145) 
at java.lang.reflect.Proxy.invoke(Proxy.java:393) 
at $Proxy2.getServices(Unknown Source) 
at www.palchiki.com.palchiki.fragment.ServiceFragment.onCreateView(ServiceFragment.java:94) 
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962) 

我使用com.squareup.retrofit2:改型:2.0.0-BETA4和com.squareup.retrofit2:转换器-GSON:2.0.0-BETA4

适配器

Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(URLWebService) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .client(okHttpClient) 
      .build(); 

接口

@GET("/integration.php?command=getServices") 
Call<ServiceResponse> getServices(@Query("city") String cityId); 

回答

0

您必须为类ServiceResponse指定一个Converter,以便gson序列化/反序列化您的类效果沉着应对 它会是这样的

GsonBuilder builder = new GsonBuilder(); 
builder.registerTypeAdapter(ServiceResponse.class, new ServiceResponseJson()); 
Gson gson = builder.build(); 

以后,你就必须提供此GSON实例您GSON转换器厂这样

....addConverterFactory(GsonConverterFactory.create(gson)) 

ServiceResponseJson将必须实现 JsonDeserializer和/或JsonSerializer

+0

GSON gsonBuilder =新GsonBuilder()excludeFieldsWithModifiers(Modifier.FINAL,Modifier.TRANSIENT,Modifier.STATIC) .serializeNulls() .create(); –

0

在Android M中使用Retrofit2时有一个isssue,如here中提到的

之一在于为我工作的解决方案是:

Retrofit retrofit = new Retrofit.Builder() 
     .baseUrl(URLWebService) 
     .addConverterFactory(GsonConverterFactory.create(
           new GsonBuilder() 
           .excludeFieldsWithoutExposeAnnotation() 
           .create() 
          )) 
     .client(okHttpClient) 
     .build();