菜鸟笔记
提升您的技术认知

okhttp get 和 post 的使用-ag真人游戏

1 okhttp 介绍

android 系统主要提供两种方式来进行 http 通信,httpurlconnection 和 httpclient,但是由于 httpclient 的 api 数量过多,从 android 2.3 及以后版本中,google 推荐使用 httpurlconnection。httpurlconnection 是一种多用途、轻量极的 http 客户端,使用它来进行 http 操作可以适用于大多数的应用程序。虽然 httpurlconnection 的 api 提供的比较简单,但是同时这也使得我们可以更加容易地去使用和扩展它。但也正是因为这样,httpurlconnection 的使用还是比较复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码,于是乎,一些android 网络通信框架也就应运而生,今天要讲的就是 okhttp 开源框架。okhttp 可以做很多事,包括上传字符串、上传文件、上传流、上传表格参数、上传多部分的请求、响应 json、响应缓存等。目前主要流行 json 数据通信,所以我们主要讲基于 json 通信的 get 和 post 请求与响应。

2 下载 okhttp

  1. 下载 okhttp 的 jar 包,可以去 github 下载最近的包。

    这是最新下载地址:https://search.maven.org/remote_content?g=com.squareup.okhttp3&a=okhttp&v=latest 
    当然,你也可以在项目中直接添加编译(用于 android studio):compile 'com.squareup.okhttp3:okhttp:3.2.0' 
    okhttp 的项目地址:https://github.com/square/okhttp

  2. 还需要添加一个 okhttp 的依赖包:okio.jar,下载地址:https://search.maven.org/remote_content?g=com.squareup.okio&a=okio&v=latest 
    项目地址:https://github.com/square/okio 
    编译地址:compile 'com.squareup.okio:okio:1.6.0'

3 get 请求

我们从最简单的 http 请求开始学起,首先需要获取一个 okhttpclient 对象,方法如下:

okhttpclient mhttpclient = new okhttpclient();

okhttpclient 用于管理所有的请求,内部支持并发,所以我们不必每次请求都创建一个 okhttpclient 对象,这是非常耗费资源的。接下来就是创建一个 request 对象了,如下所示:

request request = new request.builder()
    .
    .build();

下面实现从网络下载图片的完整代码:

public static void main(string[] args) throws ioexception {
		//1, 导包
		//2, 得到okhttp的客户端
		okhttpclient client = new okhttpclient();
		//3, 发起新的请求, 得到响应对象
		request request = new request.builder()
							.
							.build();
		
		response response = client.newcall(request).execute();
		if(response.issuccessful())
		{
			//获取要访问资源的byte数组
			byte[] arr = response.body().bytes();
			fileoutputstream fos = new fileoutputstream("d:/bd.jpg");
			fos.write(arr);
			fos.close();
			system.out.println("图片下载成功!!!!!");
		}
	}

4 post 请求

http 常用的请求分为 get 和 post 请求,刚才我们使用的明显是一个 get 请求,那么,如何发起一个 post 请求呢?其实很简单,在第二步中有一个 post 方法,就可以传入请求参数。

首先,创建一个 requestbody 对象,这里我们用它的一个子类 formbody 创建一个表单数据参数,如下所示:

//表单数据
formbody.builder builder = new formbody.builder();
builder.add("xwdoor","xwdoor");
requestbody formbody = builder.build();

然后以此构建 request 对象,如下所示:

request request = new request.builder()
    .
    .post(formbody)
    .build();

调用 post() 方法,将创建的 requestbody 对象传入即可。开始请求与前面讲的 get 请求一样。实现 post 请求大概分四步:

  1. 创建 okhttpclient 对象
  2. 创建 requestbody 对象
  3. 创建 request 对象
  4. 将 request 对象添加到 okhttpclient 中,并传入回调函数。

完整实例:

public static void main(string[] args) throws ioexception {	
		//1, 导包	
		//2, 的到客户端
		okhttpclient client = new okhttpclient();
		
		//3, 发起新的请求,获取返回信息
		requestbody body = new formbody.builder()
							.add("usename", "abc")//添加键值对
							.add("usepwd", "321")
							.build();
		request request = new request.builder()
							.
							.post(body)
							.build();
		response response = client.newcall(request).execute();
		if(response.issuccessful())
		{
			string str = response.body().string();
			system.out.println("服务器响应为: "   str);
		}
	}
网站地图