okhttp3.x的post请求

趁下班前发一篇短文。

热衷于使用okhttp的理由,数据压缩率高,传输数据时省流量。

今天讲解下okhttp3.x的post请求的用法,get请求与okhttp2.x一样。

我下载的是okhttp3.4.1和okio1.9.0。post请求最常用的是带参数和带内容的数据传递,时间有限就讲这两种。

第一件要说的是连接网络,android的清单记得给权限。

第二件要说的是android一定要用开个线程请求网络,别阻塞UI线程。


1.带参数的post传输。

okhttp3.x用FormBody.Builder代替过去FormEncodingBuilder用法一样的。

事例:

FormBody.Builder params=new FormBody.Builder();
	params.add("data", "0");
OkHttpClient okHttpClient=new OkHttpClient();
Request request=new Request.Builder()
	        .url(url)
		.post(params.build())
		.build();
Call call=okHttpClient.newCall(request);
	call.enqueue(new Callback() {
	@Override
	public void onResponse(Call arg0, Response response) throws IOException {
           //   响应成功  response.body().string() 获取字符串数据,当然还可以获取其他
        }
        @Override
        public void onFailure(Call arg0, IOException arg1) {
           //   响应失败
        }

params中添加键值对。

然后new一个okhttpclient,再创建一个request,把url和post参数塞进request。Call.enqueue()方法可以直接链接网络了,而且可以回调给我们成功或失败。

2.带内容的post传输。

需要用到RequestBody

事例:

RequestBody body=RequestBody.create(MediaType.parse("text/html"),"1");
OkHttpClient okHttpClient=new OkHttpClient();
Request request=new Request.Builder()
		.url(url)
		.post(body)
		.build();
try {
	Response response=okHttpClient.newCall(request).execute();
	response.body().string();
        //这里没有用call.enqueue方式连接,用了execute方式,都一样的,写法不一样而已,看个人喜欢
} catch (IOException e) {
	e.printStackTrace();//响应失败了,进行响应操作
}

这里RequestBody类有个工厂方法是create,里面放两个参数:

create(参数1,参数2)

参数1:数据类型,等于网页说的响应头最常见的是text/html,这是html网页的文本类型,还有application/json,这是json格式。

参数2:内容,支持的数据类型,byte[] ,String,ByteString,File


以上是全部内容了,简单的post传输。

要注意一点的是,无论是带参数还是带内容,请求的方式上面提到了两种,重要的事情,再说一次,

第一种,call.enqueue加入call队列方式,可以调度,网络响应成功或失败都有回调

第二种,execute方式,这种方式快捷,没有什么回调,只要一个try/catch捕抓下异常,效果等同于第一种的回调接口。


最后做个搬运工个,okhttp3.4.1和okio1.9.0的jar包,附上链接。

http://download.csdn.net/detail/qq_29623203/9589007

你可能感兴趣的:(android)