天天看点

Android 网络请求详解

我们知道大多数的 android 应用程序都是通过和服务器进行交互来获取数据的。如果使用 http 协议来发送和接收网络数据,就免不了使用 httpurlconnection 和 httpclient,而 android 中主要提供了上述两种方式来进行 http 操作。并且这两种方式都支持 https 协议、以流的形式进行上传和下载、配置超时时间、ipv6、以及连接池等功能。

但是 googl e发布 6.0 版本的时候声明原生剔除 httpclient,但是笔者认为 httpclient 会提供相应的 jar 包做支持,毕竟 google 对向下兼容这方面一直都做的很好,相信在选择网络功能的时候我们会选自己喜欢的方法。

接着我们来看一下如何使用 httpurlconnection 来处理简单的网络请求。

由于 google 已经表明了推荐广大开发者使用 httpurlconnection,那么想必是有一定原因的。

xutils3

这里就推荐大伙都很熟悉的开源项目 xutils 的“弟弟“,xutils3。xutils 包含了 view 注入,图片处理,数据库操作以及网络请求封装,xutils 使用的网络请求封装是基于 httpclient 的。xutils3 使用的网络请求是基于 httpurlconnection,我们着重说明一下xutils3。

具有 cache 功能

post请求直接更改 post 方式,以及需要提交的参数即可,篇幅问题这里就不在一一列举了。通过以上代码可以看到,我们在使用 xutils 来请求网络的时候会非常的方便,只用在回调函数里面做对应的代码逻辑处理即可,不用关心线程问题,极大的解放了我们的生产力。

android stuido gradle使用方法如下:

volley

在 android 2.3 及以上版本,使用的是 httpurlconnection,而在android 2.2 及以下版本,使用的是 httpclient。鉴于现在的手机行业发展速度,我们已经不考虑 android2.2 了。

简单提供一些 volley 的实例:

当然我们也可以定制自己的 request

同样,我们来看一下 httpclient 的简单请求。

httpclient 也拥有这大量优秀的开源工程,afinal、xutils 以及asynchttpclient,也可以为广大开发者提供已经造好的轮子。由于xutils 是基于 afinal 重写的,现在 xutils3 也有替代 xutils 的趋势,所以我们在这就简单介绍一下 asynchttpclient。

asynchttpclient

见名知意,asynchttpclient 对处理异步 http 请求相当擅长,并通过匿名内部类处理回调结果,http 异步请求均位于非 ui 线程,不会阻塞 ui 操作,通过线程池处理并发请求处理文件上传、下载、响应结果自动打包 json 格式。使用起来会很方便。

经过上面的代码发现,asynchttpclient 使用起来也是异常简洁,主要靠回调方法来处理成功或失败之后的逻辑。仔细想想,xutils 的处理方式和这个处理方式很类似,看来好用设计还是很受人青睐的。

如果两种网络请求都想使用怎么办?那么 okhttp 是一个最佳解决方案了。

okhttp 在网络请求方面的口碑很好,就连 google 自己也有使用okhttp。虽然 google6.0 中剔除了 httpclient 的 api,但是由于okhttp 的影响力以及其强大的功能,使用 okhttp 无需重写您程序中的网络代码。同时最重要的一点 okhttp 实现了几乎和java.net.httpurlconnection 一样的 api。如果您用了 apache httpclient,则 okhttp 也提供了一个对应的 okhttp-apache 模块。足以说明 okhttp 的强大,下面是一些例子。

一般的 get 请求

一般的 post 请求

基于 http 的文件上传

文件下载

加载图片

支持请求回调,直接返回对象、对象集合

支持 session 的保持

简单代码实例

android studio gradle 使用方式:

compile 'com.squareup.okhttp:okhttp:2.7.0'

android 开发应用少不了使用网络,移动互联时代,抢占终端入口变得异常重要,那么我们在开发过程中,不管使用哪一种网络请求,httpurlconnection 或者是 httpclient,都可以满足我们和服务器的沟通。

可是发布的 app 到用户手中后,有用 wifi 的,有用流量的,网络环境多样,我们怎么能知道用户在什么样的情况下访问服务器的流畅度呢?

答案很简单,只要集成了oneapm mobile insight,即可轻松知晓网络交互情况,轻松了解用户在使用app的过程中哪里容易出问题,并对症下药。

oneapm mobile insight ,监控网络请求及网络错误,提升用户留存。访问 oneapm 官方网站感受更多应用性能优化体验,想阅读更多技术文章,请访问 oneapm 官方技术博客。

本文转自 oneapm 官方博客