最近的工作中,我们使用了OkHttp3来进行网络请求。
因为之前工作都是使用别人封装好的网络请求,这一次准备自己写写代码使用okhttp来学习一下这个网络请求的框架。
1.首先我们开发的话肯定是要配置build.grade文件了
compile 'com.squareup.okhttp3:okhttp:3.4.1'直接复制粘贴拿去就行
2.我们要明确请求的方式:GET 和 POST
GET:是我们在请求的过程中,自己拼接参数,以明文的形式去进行请求。
优点:简单易懂,一看就能知道对应的参数和信息,使用起来也很简单。
缺点:和优点一样,一看就能知道对应的参数和信息,所以会存在一个安全问题。
注:在使用https以后,安全性就要好一些,传输过程中就看不到了。
***********************
POST:是我们在请求的过程中不用手动拼接,而且不以明文的形式去请求。
优点:安全,还可以上传各种类型的数据。
缺点:使用起来要比GET繁琐点。
3.实际代码
首先是get(同步,异步两种)
同步:请求完成才接着进行下一步。
异步:不需要等请求结束才能进行下一步。
(这里,就可以联想到用户的登录,和登录之后用户的进行操作,在这我就先不多说了,下一篇再细说)
1).同步:
//创建okHttpClient对象
OkHttpClient client = new OkHttpClient();
//创建一个Request
final Request request = new Request.Builder()
.url("你的url")
.build();
new Thread(new Runnable() {
@Override
public void run() {
Response response = null;
try {
response = client.newCall(request).execute();
Log.i("WY","Response返回码" );
if (response.isSuccessful()) {
String result=response.body().string();
Log.i("WY","打印POST响应的数据:" + result);
} else {
Log.i("WY","打印POST响应的数据:three"+response );
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
因为我是在ui线程,所以我这里使用了子线程进行网络的请求。
2).异步:
和同步基本一样,区别就是execute();换成enqueue();
好了,接下来我们开始POST
1.Post方式提交表单使用FormEncodingBuilder来构建和HTML
标签相同效果的请求体. 键值对将使用一种HTML兼容形式的URL编码来进行编码.
但是由于我是使用的okhttp3,所以这里我们就使用了FormBody来代替FormEncodingBuilder,所以看到的不理解的小伙伴们别慌,慢慢看,如果你想了解FormEncodingBuilder,可以看之前的版本,
private final OkHttpClient client = new OkHttpClient();
public void run() throws Exception {
RequestBody formBody = new FormBody.Builder()
.add("key1", "value1")
.add("key2", "value2")
.build();
Request request = new Request.Builder()
.url("你的url")
.post(formBody)
.build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
//成功我们可以response.body().string())看到请求返回的json数据
System.out.println(response.body().string());
}
到目前为止简单介绍一下post,至于具体用法,我在下一篇详细写
参考的链接:
http://blog.csdn.net/tangxl2008008/article/details/51730187
http://blog.csdn.net/lmj623565791/article/details/47911083