OkHttp——简单使用

原创 2016年08月28日 18:19:03

一、GET传输

①、OkHttp默认使用GET传输
②、使用Request发送请求。
③、使用Response接收服务器的请求。
④、通过CallBack接口回调来处理接收的时候。 OkHttp提供异步,和非异步两种方式。
示例:
public static void main(String[]args){
		//创建OkHttpClient
		OkHttpClient client = new OkHttpClient();
		//创建请求类。通过使用Builder来构造Request类,默认GET传输
		Request request = new Request.Builder()
						.url("https://www.zhihu.com/")
						.build();
		//创建用来连接服务器的Call类
		Call call = client.newCall(request);
		//将Callback回调,放入队列中。  执行异步任务
		call.enqueue(new Callback() {
			
			@Override
			public void onResponse(Call arg0, Response arg1) throws IOException {
				// TODO Auto-generated method stub
				//判断是否成功连接服务器,并返回数据
				if (arg1.isSuccessful()){
					//获取返回数据的内容
					System.out.println(arg1.body().string());
				}
			}
			
			@Override
			public void onFailure(Call arg0, IOException arg1) {
				// TODO Auto-generated method stub
				
			}
		});

		try {
			//直接在该线程中执行任务,阻塞队列,等待服务器返回结果生成Response对象
			Response response = call.execute();
			System.out.println(response.body().string());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

补充基础
①、如何设置Header
		Request request = new Request.Builder()
						.addHeader("Content-Type", "text-plain")
						.header("host", "...")
						.build();
通过使用addHeader()和header()方法通过键值对的形式来创建请求的头部。
addHeader()的header()的区别:
addHeader():当存在相同的键名时候,不会覆盖该键名的数据,而是添加数据。
header():会覆盖当前相同键名的数据

②、如何通过Response获取服务器传回的数据
//获取全部的头部数据
Headers headers = response.headers();
//遍历数据(详细方法请参照api文档)
for(String name : headers.names()){
   System.out.println(headers.get(name));
}
					
//获取全部的内容数据
ResponseBody body = response.body();
//由于数据是存放在内存的,所以当内容数据小于1M就能直接接收。
String str = body.string();
//但是当大于1M的时候,就要通过流,传输到硬盘中
InputStream is = body.byteStream();

二、POST传输(仿表单传输)
①、上传简单key-value
OkHttpClient client = new OkHttpClient();
		//创建上传的数据(仿表单的形式)
FormBody body = new FormBody.Builder()
		.add("name", "chen")
		.add("pwd", "hello")
		.build();
//创建请求类,设定为Post请求,并放入要上传的数据
Request request = new Request.Builder()
		.url("https://www.zhihu.com/")
		.post(body)
		.build();
②、上传单个文件
public static final MediaType MEDIA_TYPE_FILE = MediaType.parse("application/octet-stream;charset:utf-8");
public static void main(String[]args){
        OkHttpClient client = new OkHttpClient();
	//将Body设置为表单,然后通过addFormDataPart()上传表单。
	MultipartBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
			   .addFormDataPart("data", "da.txt", RequestBody.create(MEDIA_TYPE_FILE, new File("asda")))
			   .build();
	Request request = new Request.Builder()
			.url("https://www.zhihu.com/")
			.post(body)
		        .build();
	}
原理:
表单上传文件的html表示:
Content-Disposition:form-data;name="images"                  
filename="storage/emulated/0/Camera/picture/tempeter.jpg"
Content-Type: application/octet-stream           

这里是文件的二进制数据...
name = "data"   fileName = "da.txt"   Content-Type:  MEDIA_TYPE_FILE
数据就是:new File("asda");

③、通过表单上传多个数据(文件,普通键值对)    (简称复合请求)
RequestBody body = new MultipartBody.Builder()
		.setType(MultipartBody.FORM)
		//上传文件
		.addPart(Headers.of("Content-Disposition","format-data;name=\"image\";filename=\"icon.png\""),
		RequestBody.create(MEDIA_TYPE_FILE, new File("image.png")))
		//上传普通键值对。
		.addPart(Headers.of("Content-Disposition","format-data;name=\"name\""),
		RequestBody.create(null, "chen"))
		.build();
}










OKhttp简单使用

简单说一下学习okhttp的理由 google在Android 6.0中删除了HttpClient的Api,采用的是则是okhttp高效的使用HTTP,使应用运行更快更省流量响应缓存数据避免重复...
  • huangjiamingboke
  • huangjiamingboke
  • 2017年06月12日 09:33
  • 195

okhttp的简单使用例子

OKHttp是一款高效的HTTP客户端,支持连接同一地址的链接共享同一个socket,通过连接池来减小响应延迟,还有透明的GZIP压缩,请求缓存等优势。  1. GET  在OKHttp,每次...
  • sanciyuan2044123845
  • sanciyuan2044123845
  • 2017年05月11日 14:53
  • 694

Okhttp的简单介绍和使用(一)

通过本篇可以了解到: 1、okhttp是什么 2、okhttp的优点 3、okhttp的简单使用
  • wuyinlei
  • wuyinlei
  • 2016年01月25日 13:47
  • 11691

OKHttp简单使用

get请求 public static void Get(String url, Callback callback) { OkHttpClient mOkHttpClient = new OkH...
  • akjbm
  • akjbm
  • 2016年05月19日 10:28
  • 288

OKhttp 简单使用

OKhttp 上传下载 简单的几个设置 但是不包括请求头部
  • github_36225693
  • github_36225693
  • 2017年01月18日 18:50
  • 71

Okhttp简单使用

异步GET请求 异步POST 配置okHttpClient 使用 Okhttp 下载文件和更新进度条异步GET请求 public void asynGet(View view) { ...
  • Android_Study_OK
  • Android_Study_OK
  • 2017年05月22日 13:25
  • 207

OkHttp简单使用

适用范围: OkHttp支持Android 2.3及其以上版本。 对于Java, JDK1.7以上。 get 请求方式: OkHttpClient okHttpClient = new...
  • song_hong_da
  • song_hong_da
  • 2016年06月30日 11:32
  • 22

okhttp3的简单使用

1、添加依赖 compile 'com.squareup.okhttp3:okhttp:3.4.0-RC1' MAVEN com.squareup.okhttp3 okhttp...
  • bruceyangjie
  • bruceyangjie
  • 2016年07月07日 19:42
  • 1872

Okhttp的简单使用

项目中,我们需要和服务器进行大量的交互,其中最为频繁地就是Get方式和Post方式,下面就将主流的网络框架Okhttp的 Get方式和Post方式的使用做一下介绍: 1.Get方式: OkHtt...
  • qq_36428821
  • qq_36428821
  • 2017年07月19日 10:47
  • 104

okhttp网络请求框架的简单使用

同步GET请求: private final OkHttpClient client = new OkHttpClient(); public void run() throws Exce...
  • cheng9981
  • cheng9981
  • 2016年11月24日 10:32
  • 158
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OkHttp——简单使用
举报原因:
原因补充:

(最多只允许输入30个字)