基于okhttp的异步请求
2015-09-23 00:00
495 查看
抽空封装了一下基于okHttp的网络请求,刚刚封装好get,post, download,upload请求,不需要创建线程,支持Json自动转换 。
Get和Post(文件上传也属于Post)主要分俩个步骤:
1.通过HttpRequestBuilder来创建请求实体对象。
2.通过HttpUtil的sendRequest方法来发送请求,并且使用ResultCallBack来接受返回内容,这个步骤中成功时,自动将json转换为实体,若失败会执行ResultCallBack的onError 方法,并传递HttpException,这个对象中包含http错误代码,比如404,500等。
get请求方式:
post请求:
文件上传:
文件下载是Get请求,只不过没有使用ResultCallBack而是使用了DownloadCallBack,可以监听下载进度,有完成和失败的回调。代码如下:
源码地址:
https://github.com/YounMario/HttpDemo
Get和Post(文件上传也属于Post)主要分俩个步骤:
1.通过HttpRequestBuilder来创建请求实体对象。
2.通过HttpUtil的sendRequest方法来发送请求,并且使用ResultCallBack来接受返回内容,这个步骤中成功时,自动将json转换为实体,若失败会执行ResultCallBack的onError 方法,并传递HttpException,这个对象中包含http错误代码,比如404,500等。
get请求方式:
private void getSample() { HttpRequest request = new HttpRequestBuilder().url(url) .addHeader("cookie", "df").addParams("key", "value") .method(HttpMethod.GET).build(); HttpUtil.getInstance().sendRequest(request, new ResultCallBack<Result>() { @Override public void onResponse(Result response) { // TODO Auto-generated method stub textView.setText(response.getData().getName()); } @Override public void onError(Request request, HttpException httpException) { // TODO Auto-generated method stub textView.setText("requestCode:"+httpException.getResponseCode()+" ErrorMessage:"+httpException.getMessage()); } }); }
post请求:
private void postSample() { HttpRequest request = new HttpRequestBuilder() .url("http://www.oschina.net/action/user/hash_login") .addHeader("cookie", "df").addParams("email", "xxxxxxxxx") .addParams("pwd", "xxxxxxxxxxxxxxxxx") .method(HttpMethod.POST).build(); HttpUtil.getInstance().sendRequest(request, new ResultCallBack<String>() { @Override public void onError(Request request, HttpException httpException) { // TODO Auto-generated method stub } @Override public void onResponse(String response) { // TODO Auto-generated method stub textView.setText(response); } }); }
文件上传:
private void fileUploadSample() { if (!TextUtils.isEmpty(textView.getText())) { File file = new File(textView.getText().toString()); final String url = "服务器地址。。。"; HttpRequest request = new HttpRequestBuilder() .url(url) .method(HttpMethod.POST) .addFile( new FileDiscription(file) .setUploadPrograssListener(fileUploadListener)) .build(); HttpUtil.getInstance().sendRequest(request, new ResultCallBack<String>() { @Override public void onError(Request request, HttpException httpException) { // TODO Auto-generated method stub } @Override public void onResponse(String response) { // TODO Auto-generated method stub textView.setText(response); } }); } }
文件下载是Get请求,只不过没有使用ResultCallBack而是使用了DownloadCallBack,可以监听下载进度,有完成和失败的回调。代码如下:
private void downLoad(){ HttpRequest request= new HttpRequestBuilder() .url("http://img.taopic.com/uploads/allimg/130501/240451-13050106450911.jpg") .method(HttpMethod.GET).downLoadPath(filePath, String.valueOf(new Date().getTime())+".jpg").build(); HttpUtil.getInstance().downLoad(request, new DownLoadCallBack() { @Override public void onDownLoading(int prograss) { // TODO Auto-generated method stub textView.setText(prograss+"%"); progressBar.setProgress(prograss); } @Override public void onDownLoadSuccess() { // TODO Auto-generated method stub textView.setText("down load success"); } @Override public void onDownLoadFail(HttpException ex) { // TODO Auto-generated method stub textView.setText(ex.getMessage()); } }); }
源码地址:
https://github.com/YounMario/HttpDemo
相关文章推荐
- 一起学CC3200之OTA固件升级(使用HTTP方式下载APP:初级篇)
- 2015北京网络赛 G题 Boxes bfs
- VMware 设置ubuntu12.04 桥接网络
- C++网络编程卷1、卷2概述
- 打造安全的App!iOS安全系列之 HTTPS 进阶
- 反网络爬虫
- [网络原理]如何理解“链路层交换机通常用于接入网中,而路由器通常用于网络核心中”
- HTTP协议 : 协议的完整的通信过程
- HttpSessionListener案例: 自定义HttpSession扫描器
- 2015北京网络赛 J Clarke and puzzle 分块+bitset
- [网络原理]这句话:”端系统(end system)通过通信链路(communication link)和分组交换机(packet switch)连接到一起“似乎不准确...
- 2015沈阳赛区网络赛 HDU 5457 Hold Your Hand 字典树+最小割
- 安卓:handler解析json新闻,显示图片,标题,内容(未判断网络连接状态)
- 网络3层相关的几个问题
- 安卓:handler下载网络图片(附带有进度条和网络连接判断的APP)
- HDU3549 Flow Problem (网络流入门题)
- poj Asteroids (二分匹配之匈牙利算法)
- C++ 用libcurl库进行http通讯网络编程
- Cloudstack 4.5基础网络架构部署——cloudstack management server(01)
- eclipse:报错信息The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path