最近更换了测试机(华为P20 pro,系统Android9)之后,发现网络请求有问题,提示如下:
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/impl/client/DefaultHttpClient;
at com.example.jartest.connAsyncTask$2.doInBackground(connAsyncTask.java:174)
at com.example.jartest.connAsyncTask$2.doInBackground(connAsyncTask.java:1)
....
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.impl.client.DefaultHttpClient" on path: DexPathList[[zip file "/data/app/com.rokin.slab-QhamTqNQ7CEj-yoBzbWGFA==/base.apk"],nativeLibraryDirectories=[/data/app/com.rokin.slab-QhamTqNQ7CEj-yoBzbWGFA==/lib/arm64, /system/lib64, /system/product/lib64, /hw_product/lib64, /system/product/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.example.jartest.connAsyncTask$2.doInBackground(connAsyncTask.java:174)
at com.example.jartest.connAsyncTask$2.doInBackground(connAsyncTask.java:1)
at android.os.AsyncTask$3.call(AsyncTask.java:378)
但换成之前的测试机就没问题,推测是Android9对httpclient网络进行了改动。经查,该问题可追溯到Android5.1。
在Android5.1.1,已经不建议使用自带的org.apache.http.*
在Android6.0,直接移除它,并且不支持org.apache.http.*包的解析,只保留了几个类
在Android9.0后,默认情况下org.apache.http.*已从 bootclasspath中移除且不可用于应用
解决方法:
1、如若继续使用httpclient,可降低sdkversion至28以下(小于28)即可
eclipse在AndroidManifest.xml中修改;
Android Studio在build.gradle中修改
2、放弃使用httpclient等,改用Volley或OKHttp3
暂提供这两种方法,仅供学习,谢谢