Retrofit的Gson转换器请求报错 java.lang.IllegalArgumentException: Unable to create converter for

今天Retrofit的请求突然报错,发现异常 java.lang.IllegalArgumentException: Unable to create converter for ,异常如下。看来是创建Gson的转换器出错(retrofit用gson将字符串转化为实体对象),而且这个异常只出现在Android 6.0 ,Android 7.0,Android 8.0手机上

11:09:58.70 15854 WARN System.err 1 java.lang.IllegalArgumentException: Unable to create converter for com.xxx.common.entity.ResultEntity>
11:09:58.70 15854 WARN System.err 1 for method OralService.getPracticeListNew
11:09:58.70 15854 WARN System.err 1 at retrofit2.Utils.methodError(Utils.java:52)
11:09:58.70 15854 WARN System.err 1 at retrofit2.HttpServiceMethod.createResponseConverter(HttpServiceMethod.java:115)
11:09:58.70 15854 WARN System.err 1 at retrofit2.HttpServiceMethod.parseAnnotations(HttpServiceMethod.java:82)
11:09:58.70 15854 WARN System.err 1 at retrofit2.ServiceMethod.parseAnnotations(ServiceMethod.java:37)
11:09:58.70 15854 WARN System.err 1 at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170)
11:09:58.70 15854 WARN System.err 1 at retrofit2.Retrofit$1.invoke(Retrofit.java:149)
11:09:58.70 15854 WARN System.err 1 at java.lang.reflect.Proxy.invoke(Proxy.java:913)
–接口调用的方法

所以要往下找为什么创建出错,发现又有异常, java.lang.SecurityException: Can not make a java.lang.reflect.Method constructor accessible ,这个是在 java.lang.reflect.AccessibleObject.setAccessible0 中抛出的,很明显是调用反射类中的,意思是你实体类里面如果有 Method类型的属性,就抛出异常

11:09:58.71 15854 WARN System.err 1 Caused by: java.lang.SecurityException: Can not make a java.lang.reflect.Method constructor accessible
11:09:58.71 15854 WARN System.err 1 at java.lang.reflect.AccessibleObject.setAccessible0(AccessibleObject.java:131)
11:09:58.71 15854 WARN System.err 1 at java.lang.reflect.AccessibleObject.setAccessible(AccessibleObject.java:115)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.reflect.PreJava9ReflectionAccessor.makeAccessible(PreJava9ReflectionAccessor.java:31)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.ConstructorConstructor.newDefaultConstructor(ConstructorConstructor.java:103)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.ConstructorConstructor.get(ConstructorConstructor.java:85)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:101)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.Gson.getAdapter(Gson.java:458)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.Gson.getAdapter(Gson.java:458)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ArrayTypeAdapter$1.create(ArrayTypeAdapter.java:48)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.Gson.getAdapter(Gson.java:458)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.Gson.getAdapter(Gson.java:458)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.Gson.getAdapter(Gson.java:458)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.Gson.getAdapter(Gson.java:458)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.Gson.getAdapter(Gson.java:458)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.CollectionTypeAdapterFactory.create(CollectionTypeAdapterFactory.java:53)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.Gson.getAdapter(Gson.java:458)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
11:09:58.71 15854 WARN System.err 1 at com.google.gson.Gson.getAdapter(Gson.java:458)
11:09:58.71 15854 WARN System.err 1 at retrofit2.converter.gson.GsonConverterFactory.responseBodyConverter(GsonConverterFactory.java:64)
11:09:58.71 15854 WARN System.err 1 at retrofit2.Retrofit.nextResponseBodyConverter(Retrofit.java:330)
11:09:58.71 15854 WARN System.err 1 at retrofit2.Retrofit.responseBodyConverter(Retrofit.java:313)
11:09:58.71 15854 WARN System.err 1 at retrofit2.HttpServiceMethod.createResponseConverter(HttpServiceMethod.java:113)
11:09:58.71 15854 WARN System.err 1 … 29 more

网上查了一下,看大神的回答 https://github.com/google/gson/issues/1220

You are trying to serialize a type that has a field whose type is java.lang.reflect.Method. This either needs marked transient or you need to write a custom type adapter for it.

发现应该是你的 定义的实体类中有非法的属性,简单看了一下我定义的实体类
发现里面有个View类型的属性,是用来做本地一些操作的,然而View里有Method 类型的属性,所以就抛出异常了,醉了。。。后来就改了逻辑,把这个属性去掉了,就好了

你可能感兴趣的:(android框架)