Android开发请求网络方式详解
2016-01-23 13:15
344 查看
HttpUrlConnection
HttpUrlConnection是JDK里提供的联网API,我们知道Android SDK是基于Java的,所以当然优先考虑HttpUrlConnection这种最原始最基本的API,其实大多数开源的联网框架基本上也是基于JDK的HttpUrlConnection进行的封装罢了,掌握HttpUrlConnection需要以下几个步骤:1将访问的路径转换成URL。
?
?
?
?
?
?
7.1,请求码200,表明请求成功,获取返回内容的输入流
?
?
HttpUrlConnection发送GET请求
?
HttpUrlConnection发送POST请求
?HttpClient
HttpClient是开源组织Apache提供的Java请求网络框架,其最早是为了方便Java服务器开发而诞生的,是对JDK中的HttpUrlConnection各API进行了封装和简化,提高了性能并且降低了调用API的繁琐,Android因此也引进了这个联网框架,我们再不需要导入任何jar或者类库就可以直接使用,值得注意的是Android官方已经宣布不建议使用HttpClient了,我们再开发的时候尽量少用吧,但是用了也无妨!
HttpClient发送GET请求
1, 创建HttpClient对象2,创建HttpGet对象,指定请求地址(带参数)
3,使用HttpClient的execute(),方法执行HttpGet请求,得到HttpResponse对象
4,调用HttpResponse的getStatusLine().getStatusCode()方法得到响应码
5,调用的HttpResponse的getEntity().getContent()得到输入流,获取服务端写回的数据
?
HttpClient发送POST请求
1,创建HttpClient对象2,创建HttpPost对象,指定请求地址
3,创建List,用来装载参数
4,调用HttpPost对象的setEntity()方法,装入一个UrlEncodedFormEntity对象,携带之前封装好的参数
5,使用HttpClient的execute()方法执行HttpPost请求,得到HttpResponse对象
6, 调用HttpResponse的getStatusLine().getStatusCode()方法得到响应码
7, 调用的HttpResponse的getEntity().getContent()得到输入流,获取服务端写回的数据
?
其他开源联网框架
AsyncHttpClient
除了上述Android官方推荐的联网框架以外,在开源世界里关于联网框架真是太多太多了,例如afinal,xutils等等,都是一些开源大牛自己封装的联网框架,并且在GitHub开源社区中可以下载到,其实类似的开源联网框架基本上也是基于HttpUrlConnection的进一步封装,大大提高了性能,同时更加简化了使用方法,这里使用AsyncHttpClient作为案例,其他的联网框架大家可以去网上找,下载使用试试便可。AsyncHttpClient是一个非常优秀的联网框架,不仅支持所有Http请求的方式,而且还支持文件的上传和下载,要知道用HttpUrlConnection写一个文件上传和下载健全功能是很需要花费一定时间和精力的,因为请求头实在是太多了,稍有不慎就会写错。但是AsyncHttpClient已经封装好了这些“麻烦”,我们只需要下载到AsyncHttpClient的jar包或者源码导入项目中,Http,上传,下载等等,只需要几个简单的api即可搞定。
AsyncHttpClient的GitHub主页:https://github.com/AsyncHttpClient/async-http-client/
AsyncHttpClient发送GET请求
1,将下载好的源码拷贝到src目录下2,创建一个AsyncHttpClient的对象
3,调用该类的get方法发送GET请求,传入请求资源地址URL,创建AsyncHttpResponseHandler对象
4,重写AsyncHttpResponseHandler下的两个方法,onSuccess和onFailure方法
?
AsyncHttpClient发送POST请求
1,将下载好的源码拷贝到src目录下2,创建一个AsyncHttpClient的对象
3,创建请求参数,RequestParams对象
4,调用该类的post方法发POST,传入请求资源地址URL,请求参数RequestParams,创建AsyncHttpResponseHandler对象
5,重写AsyncHttpResponseHandler下的两个方法,onSuccess和onFailure方法
?
AsyncHttpClient上传文件
1,将下载好的源码拷贝到src目录下2,创建一个AsyncHttpClient的对象
3,创建请求参数,RequestParams对象,请求参数仅仅包含文件对象即可,例如:
?
5,重写AsyncHttpResponseHandler下的两个方法,onSuccess和onFailure方法
判断网络连接状态
很多时候对于手机或者平板电脑这样的手持设备,我们是不知道它们的网络连接状态的,在联网的时候我们必须得保证设备的网路是否正常,是否可以连接上互联网,或者我们在进行大量数据上传或者下载,例如下载网路视频,看网路电视等等,我们必须得为用户省钱,这样大数据的传输显然是不能使用用户昂贵的数据流量的,而是判断当前网络是不是在wifi下,使用WiFi来进行大数据的传输,会给用户更好的体验,那么下面这个工具类就是用来判断设备网络连接状态的,不仅判断了当前设置手机网络下还是WiFi环境下,而且如果手机网络下还需要设置运营商的代理IP和端口。?
相关文章推荐
- 网络监听器
- Android 一个改善的okHttp封装库
- tcp/ip协议的3次握手
- Ubuntu重启网络:Solution for resolvconf: Error: etc resolv.conf isn't a symlink, not doing anything
- Win10在桌面上怎么添加此电脑、网络图标、回收站等图标?
- iOS 开发的常见问题不涉及网络
- javaweb之----http协议详解
- Android学习历程12-Android 网络请求
- 几种TCP连接中出现RST的情况 2013-1
- 历史上的今天——网络爬虫
- Python 实现的下载op海贼王网的图片(网络爬虫)
- 压力测试攻击 http_load
- HttpServletRequest介绍
- GIF图片合集(用于网络请求图片用)
- caffe 学习记录1及网络结构
- Unit testing code that uses HttpContext.Current.Session
- 网络基础——知识生活化会变得如此简单
- 计算机网络-TCP/IP参考模型Reference Model)
- 转:Android 判断用户2G/3G/4G移动数据网络
- AngularJS中如何使用$http对MongoLab数据表进行增删改查