文档章节

基于okhttp的异步请求

younchen
 younchen
发布于 2015/09/23 16:55
字数 458
阅读 3762
收藏 4

抽空封装了一下基于okHttp的网络请求,刚刚封装好get,post, download,upload请求,不需要创建线程,支持Json自动转换 。

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

© 著作权归作者所有

younchen
粉丝 8
博文 94
码字总数 29970
作品 0
延吉
程序员
私信 提问
Xutils, OKhttp, Volley, Retrofit对比

Xutils这个框架非常全面,可以进行网络请求,可以进行图片加载处理,可以数据储存,还可以对view进行注解,使用这个框架非常方便,但是缺点也是非常明显的,使用这个项目,会导致项目对这个框...

安卓笔记侠
2018/08/17
0
0
Android开发之OkHttp介绍

要论时下最火的网络请求框架,当属OkHttp了。自从Android4.4开始,google已经开始将源码中的HttpURLConnection替换为OkHttp,而在Android6.0之后的SDK中google更是移除了对于HttpClient的支持...

#Temptation
08/26
0
0
Android之OkHttp详解

文章大纲 一、OkHttp简介 二、OkHttp简单使用 三、OkHttp封装 四、项目源码下载 一、OkHttp简介 1. 什么是OkHttp   一般在Java平台上,我们会使用Apache HttpClient作为Http客户端,用于发...

故事爱人
04/03
0
0
Android 网络框架 OKHttp

概述 OKhttp是一个网络请求开源项目,Android网络请求轻量级框架,支持文件上传与下载,支持https,由移动支付Square公司贡献。 依赖 compile 'com.squareup.okhttp3:okhttp:3.8.1' Get请求 ...

xi阳
2018/09/04
0
0
Android okhttp3.0 框架使用总结

最近工作主要用到OkHttp3.0网络请求框架,进行Get请求,Post请求,多文件上传等功能,本文内容大部分来源于网上博文,仅做个人总结记录 以下内容来源其他博文: 在使用OKHttp之前,首先要先了...

某杰
2018/09/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 如果是个帅小伙你愿意和他出去吗

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 小小编辑推荐:《Ghost 》游戏《死亡搁浅》原声 《Ghost 》游戏(《死亡搁浅》原声) - Au/Ra / Alan Walker 手机党少年们想听歌,请使劲儿戳...

小小编辑
44分钟前
69
5
java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
16
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部