Android6.0加载Xutils-2.6.14.jar出现retry error, curr request is null 解决办法

先前项目的下载及网络请求用的是Xutils-2.6.5.jar包,这是因为公司系统基于4.4.4系统编译依赖的JDk为1.6,较高版本无法使用。但是最近,因为系统版本升级为6.0,结果Xutils2.6.5的兼容性不好的缺点就暴露出来了,一开始出现错误:

08-28 11:28:29.537: E/RetryHandler.retryRequest(L:91)(3703): retry error, curr request is null
08-28 11:28:29.547: E/zqh(3703): error = com.lidroid.xutils.exception.HttpException: java.io.IOException: stack size 1038KB
08-28 11:28:29.547: E/zqh(3703): msg = java.io.IOException: stack size 1038KB

在网上查找答案,介绍说是换成2.6.14或者3以上的更新版本,后来我换成了2.6.14结果还是不行,出现错误:

08-28 16:40:49.736: E/RetryHandler.retryRequest(L:91)(2731): retry error, curr request is null
08-29 09:01:11.853: E/zqh(13777): error = com.lidroid.xutils.exception.HttpException: java.io.IOException: abstract method "void org.apache.http.HttpRequestInterceptor.process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext)"
08-29 09:01:11.853: E/zqh(13777): msg = java.io.IOException: abstract method "void org.apache.http.HttpRequestInterceptor.process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext)"

然后我就怀疑是不是org.apache jar包的问题,根据Android6.0之后HttpClient已经被取消,所以添加org.apache.http.legacy.jar包,进行测试,结果还是报错:

08-29 09:40:02.120: E/RetryHandler.retryRequest(L:91)(26649): retry error, curr request is null
08-29 09:40:02.142: W/System.err(26649): com.lidroid.xutils.exception.HttpException: java.io.IOException: abstract method "void org.apache.http.HttpRequestInterceptor.process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext)"
08-29 09:40:02.143: W/System.err(26649): 	at com.lidroid.xutils.http.HttpHandler.sendRequest(HttpHandler.java:147)
08-29 09:40:02.143: W/System.err(26649): 	at com.lidroid.xutils.http.HttpHandler.doInBackground(HttpHandler.java:176)
08-29 09:40:02.143: W/System.err(26649): 	at com.lidroid.xutils.http.HttpHandler.doInBackground(HttpHandler.java:1)
08-29 09:40:02.143: W/System.err(26649): 	at com.lidroid.xutils.task.PriorityAsyncTask$1.call(PriorityAsyncTask.java:67)
08-29 09:40:02.143: W/System.err(26649): 	at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-29 09:40:02.143: W/System.err(26649): 	at com.lidroid.xutils.task.PriorityRunnable.run(PriorityRunnable.java:16)
08-29 09:40:02.143: W/System.err(26649): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
08-29 09:40:02.143: W/System.err(26649): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
08-29 09:40:02.143: W/System.err(26649): 	at java.lang.Thread.run(Thread.java:818)
08-29 09:40:02.144: W/System.err(26649): Caused by: java.io.IOException: abstract method "void org.apache.http.HttpRequestInterceptor.process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext)"
08-29 09:40:02.144: W/System.err(26649): 	at com.lidroid.xutils.http.HttpHandler.sendRequest(HttpHandler.java:142)
08-29 09:40:02.144: W/System.err(26649): 	... 8 more
08-29 09:40:02.144: W/System.err(26649): Caused by: java.lang.AbstractMethodError: abstract method "void org.apache.http.HttpRequestInterceptor.process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext)"
08-29 09:40:02.145: W/System.err(26649): 	at org.apache.http.protocol.BasicHttpProcessor.process(BasicHttpProcessor.java:295)
08-29 09:40:02.145: W/System.err(26649): 	at org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor.java:165)
08-29 09:40:02.145: W/System.err(26649): 	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:414)
08-29 09:40:02.145: W/System.err(26649): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560)
08-29 09:40:02.145: W/System.err(26649): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:492)
08-29 09:40:02.145: W/System.err(26649): 	at com.lidroid.xutils.http.HttpHandler.sendRequest(HttpHandler.java:125)
08-29 09:40:02.145: W/System.err(26649): 	... 8 more

还是不行,最后,发现android6.0的Settings里面的Android.mk文件有这么一行:

LOCAL_PROGUARD_FLAG_FILES := proguard.flags
意味着,会采用混淆的模式即:本地jar包会混淆,所以程序在系统下编译的时候在本地查找org.apche的jar包时,没有发现就会去加载6.0系统原带的阿帕奇包,就出现了错误。

解决办法:

proguard.flags文件中添加#-dontwarn org.apache.**
-keep public class org.apache.** {*;}

就可以成功了。



一个Android基于快速开发的一个框架 xUtils 它是在aFinal基础上进行重构和扩展的框架 相比aFinal有很大的改善 同时 如果如果你的应用是基于网络的 那么只要处理得当 它会让你彻底的摆脱各种工具类和重复代码的困扰 xUtils 包含了很多实用的android工具 xUtils 源于Afinal框架 对Afinal进行了大量重构 使得xUtils支持大文件上传 更全面的http请求协议支持 拥有更加灵活的ORM 更多的事件注解支持且不受混淆影响 xUtils的四大组件: 一 ViewUtils 你受够了重复冗长的findViewById了嘛 你受够了各种监听事件的绑定了嘛 在这里 你只需要一句注解 如@ViewInject @OnClick 就能轻松摆脱小白似的代码 大大的上了一个档次 二 HttpUtils 支持的HTTP七种请求方式 非常便捷的满足你的接口请求的需要 同时还支持大文件上传下载 以及同步异步请求 三 BitmapUtils 你的程序因OOM强制关闭过嘛 你在为加在网络图片头疼嘛 有了组件 你将永久摆脱前面的问题 四 DbUtils 简单易用又出色的ORM框架 真的是谁用谁知道 直接轻松存储各种对象到sqlite数据库中 同时也能非常方便的进行各种条件查询 甚至分页查询 还有对表中数据的更新删除等操作 真正的实现 一行代码就可以进行增删改查 并且可通过注解自定义表名 列名 外键 唯一性约束 NOT NULL约束 CHECK约束等 支持事务 摘自github ">一个Android基于快速开发的一个框架 xUtils 它是在aFinal基础上进行重构和扩展的框架 相比aFinal有很大的改善 同时 如果如果你的应用是基于网络的 那么只要处理得当 它会让你彻底的摆脱各种工具类和重复代码的困扰 [更多]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值