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<java.util.List<com.tal.module_oral.entity.UserEntity>>
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 类型的属性,所以就抛出异常了,醉了。。。后来就改了逻辑,把这个属性去掉了,就好了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值