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

来源:互联网 发布:淘宝拆车喇叭 编辑:程序博客网 时间:2024/06/05 16:15

先前项目的下载及网络请求用的是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 null08-28 11:28:29.547: E/zqh(3703): error = com.lidroid.xutils.exception.HttpException: java.io.IOException: stack size 1038KB08-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 null08-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 null08-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 more08-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.** {*;}

就可以成功了。



阅读全文
0 0
原创粉丝点击