Android网络请求-HttpURLConnection和继续使用HttpCient的适配

HttpURLConnection和HttpClient比较 :

HttpURLConnection书写时比较繁琐,但运行效率较高

HttpClient书写变的容易,并且便于理解,运行效率不如HttpURLConnection

HttpURLConnection是一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。对于之前为何一直使用HttpClient而不使用HttpURLConnection也是有原因的。具体分析如下

HttpClient是apache的开源框架,封装了访问http的请求头,参数,内容体,响应等等,使用起来比较方便,而HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便,比如重访问的自定义,以及一些高级功能等。

从稳定性方面来说的话,HttpClient很稳定,功能强,BUG少,容易控制细节,而之前的HttpURLConnection一直存在着版本兼容的问题,不过在后续的版本中已经相继修复掉了。

从上面可以看出之前一直使用HttClient是由于HttpURLConnection不稳定导致,那么现在谷歌虽然修复了HttpURLConnection之前存在的一些问题之后,相比HttpClient有什么优势呢?为何要废除HttpClient呢?

HttpUrlConnection是Android SDK的标准实现,而HttpClient是apache的开源实现;
HttpUrlConnection直接支持GZIP压缩;HttpClient也支持,但要自己写代码处理;
HttpUrlConnection直接支持系统级连接池,即打开的连接不会直接关闭,在一段时间内所有程序可共用;HttpClient当然也能做到,但毕竟不如官方直接系统底层支持好;
HttpUrlConnection直接在系统层面做了缓存策略处理,加快重复请求的速度。

 

HttpClient

HttpClient 早期Android 程序员都封装过多网络请求库。在Android 6.0 后,google就取消了对Apache HTTP的支持。以后,相继出现了HttpUrlConnect 、okhttp .
以前我们只需要如下图配置下

就可以继续的使用httpClient。但是在9.0后,默认情况下该内容库已从 bootclasspath 中移除且不可用于应用。

9.0上如何继续使用httpClient

从Android P开始,org.apache.http.legacy 库将从 bootclasspath 中删除。

(1). 修改对 TargetSdkVersion<P 的应用的影响

该修改对大多数 TargetSdkVersion<P 的应用都无影响,但是如果应用使用了系统 ClassLoader加载org.apache.http.*中的类时,将在Android P上发生 NoClassDefFoundError 失败,因为系统ClassLoader不再知道这些类。为了防止将来出现类似的问题,应用应该通过应用 ClassLoader 加载类,而不是直接访问系统ClassLoader。

(2). 修改对 TargetSdkVersion>=P 的应用的影响

对所有 TargetSdkVersion>=P 的应用,如果还是按照以前一样通过在 build.gradle 文件中声明以下编译时依赖项:\

android {
    useLibrary 'org.apache.http.legacy'
}

想继续使用 Apache-http 接口,都会出现 Apache-http 接口找不到的异常。

解决方法,如下图user-library:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用HTTPURLConnection发送请求,可以按照以下步骤进行: 1. 在AndroidManifest.xml文件中添加网络权限: ``` <uses-permission android:name="android.permission.INTERNET" /> ``` 2. 在子线程中使用HTTPURLConnection发送请求,例如: ``` Thread thread = new Thread(new Runnable() { @Override public void run() { try { // 创建URL对象 URL url = new URL("http://www.example.com/api"); // 打开连接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 设置请求方法 connection.setRequestMethod("GET"); // 设置连接超时和读取超时时间 connection.setConnectTimeout(5000); connection.setReadTimeout(5000); // 发送请求 connection.connect(); // 获取响应码 int responseCode = connection.getResponseCode(); // 获取响应数据 InputStream inputStream = connection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); inputStream.close(); String responseData = response.toString(); // 处理响应数据 } catch (Exception e) { e.printStackTrace(); } } }); thread.start(); ``` 这个例子中发送了一个GET请求,获取了http://www.example.com/api的响应数据。你可以根据需要设置请求方法、请求参数、请求头等。获取响应数据后,可以在UI线程中更新UI或者在子线程中处理响应数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值