android网络框架之OKhttp,一个处理网络请求的开源项目,是安卓端最火热的轻量级框架。android在开发的时候很少直接与数据库打交道,所以就有了通过接口的方式使android与数据库间接通信,通信方式就是使用okhttp插件。
1 okhttp的环境配置
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
并且在清单文件中打开网络权限
2 OkHttp介绍
OkHttp分为get和post请求,在这两种请求中又分为同步和异步的请求。同步的意思就是得等到服务器有相应才会继续往下走,所以同步的方式都需要开启一个线程。
2.1 okhttp get的同步请求
//注意网络同步请求必须要有一个子线程
//get同步请求
public void getSync(View view) {
new Thread(){
@Override
public void run() {
//get请求参数可以直接写在url后面
//https://www.httpbin.org/get为开源测试网址
Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").build();
//请求的call对象
Call call=okHttpClient.newCall(request);
try{
Response response =call.execute();
Log.e("get同步请求:", "getSync:"+response.body().string() );
}catch (IOException e){
e.printStackTrace();
}
}
}.start();
}
2.2 okhttp get的异步请求
//异步不需要创建线程
public void getAsync(View view) {
Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").build();
//请求的call对象
Call call=okHttpClient.newCall(request);
//异步请求
call.enqueue(new Callback() {
//失败的请求
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
}
//结束的回调
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
//响应码可能是404也可能是200都会走这个方法
if(response.isSuccessful()){
Log.e("get异步请求:", "getASync:"+response.body().string() );
}
}
});
}
2.3 okhttp post的同步请求
//okp默认是get请求,post需要有请求体,即formBody
public void postSync(View view) {
new Thread(){
@Override
public void run() {
FormBody formBody = new FormBody.Builder().add("a", "1").add("b", "2").build();
Request request = new Request.Builder().url("https://www.httpbin.org/post")
.post(formBody)
.build();
//请求的call对象
Call call=okHttpClient.newCall(request);
try{
Response response =call.execute();
Log.e("pot同步请求", "postSync:"+response.body().string() );
}catch (IOException e){
e.printStackTrace();
}
}
}.start();
}
2.4okhttp post的异步请求
public void postAsync(View view) {
FormBody formBody = new FormBody.Builder().add("a", "1").add("b", "2").build();
Request request = new Request.Builder().url("https://www.httpbin.org/post")
.post(formBody)
.build();
Call call=okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
}
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
if(response.isSuccessful()){
Log.e("pot异步请求", "postASync:"+response.body().string() );
}
}
});
}