Android 中Okhttp的同步请求与异步请求
Posted 路宇_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 中Okhttp的同步请求与异步请求相关的知识,希望对你有一定的参考价值。
同步请求与异步请求的概念:
简单地说,同步就是发出一个请求后什么事都不做,一直等待请求返回后才会继续做事;异步就是发出请求后继续去做其他事,这个请求处理完成后会通知你,这时候就可以处理这个回应了。
写了个Demo去理解Okhttp中的get同步请求与异步请求,和post同步请求与异步请求
1.get的同步请求,其中的讲解,已经在代码中注释了出来。
//get同步请求
public void getSync(View view) {
//在android 中完成网络请求必须在子线程中完成
new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url("http://www.httpbin.org/get?a=1&b=2").build();
//准备好请求的Code对象
Call call = okHttpClient.newCall(request);
try {
//同步请求要创建子线程,是因为execute()方法,会阻塞后面代码的执行
//只有执行了execute方法之后,得到了服务器的响应response之后,才会执行后面的代码
//所以同步请求要在子线程中完后
Response response = call.execute();
//把服务器给我们响应的字符串数据打印出来
Log.i(TAG,"getSync:"+response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
2.get异步请求:
//get的异步请求
public void getAsync(View view) {
//定义okhttp对象
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url("http://www.httpbin.org/get?a=1&b=2").build();
Call call = okHttpClient.newCall(request);
//异步请求:不用创建子线程
//enqueue()并不会阻塞代码的执行,不需要与服务器请求完成之后,才会执行后面的代码
//而且enqueue内部会为我们创建子线程
call.enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
if (response.isSuccessful()){
Log.i(TAG,"getAsync:"+response.body().string());
}
}
});
}
3.post同步请求:
//post同步请求
public void postSync(View view) {
new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient okHttpClient = new OkHttpClient();
//post请求规定,把参数放在请求体里面,用form表单的方式来添加我们的请求体
FormBody formBody = new FormBody.Builder().add("a", "10000").add("b", "15000").build();
Request request = new Request.Builder().url("http://www.httpbin.org/post")
.post(formBody)
.build();
Call call = okHttpClient.newCall(request);
try {
Response response = call.execute();
Log.i(TAG,"postSync:"+response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
4.post的异步请求:
//post异步请求
public void postAsync(View view) {
OkHttpClient okHttpClient = new OkHttpClient();
FormBody formBody = new FormBody.Builder().add("a", "1000").add("b", "2000").build();
Request request = new Request.Builder().url("http://www.httpbin.org/post")
.post(formBody)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
if (response.isSuccessful()){
Log.i(TAG,"postAsync:"+response.body().string());
}
}
});
}
上面用到的http服务器是公用的,需要的拿去用:地址www.httpbin.org/
以上就是Okhttp框架的简单实用~,如有不当之处,还望各位网友加以指正!
以上是关于Android 中Okhttp的同步请求与异步请求的主要内容,如果未能解决你的问题,请参考以下文章
OkHttpOkHttp Get 和 Post 请求 ( 同步 Get 请求 | 异步 Get 请求 | 同步 Post 请求 | 异步 Post 请求 )