今天来说一下使用OKHttp发发送get和post请求
1.OKHttp的同步GET使用步骤
第一步:添加依赖
implementation("com.squareup.okhttp3:okhttp:4.10.0")
第二步:设置网络权限
在AndroidManifest.xml添加Internet
<uses-permission android:name="android.permission.INTERNET" />
第三步:进行网络请求
1. 创建线程
2. 创建客户端
3. 创建请求
4. 使用客户端发送请求
5. 处理返回结果
具体代码如下:
new Thread(new Runnable() {
@Override
public void run() {
// 创建客户端
OkHttpClient client = new OkHttpClient();
// 创建请求
Request request = new Request.Builder()
.url("https://api.vvhan.com/api/mobil.girl?type=json")
.build();
// 使用客户端发送请求
try (Response response = client.newCall(request).execute()) {
result = response.body().string();
Log.i("result", result);
handler.sendEmptyMessage(0x111);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
第四步:Handler
private Handler handler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if(msg.what == 0x111) {
try {
JSONObject object = new JSONObject(result);
String imgurl = object.getString("imgurl");
Glide.with(MainActivity.this).load(imgurl).into(iv_show);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
};
2.OKHTTP的异步GET使用步骤
第一步:添加依赖
implementation("com.squareup.okhttp3:okhttp:4.10.0")
第二步:添加网络权限
在AndroidManifest.xml添加Internet
<uses-permission android:name="android.permission.INTERNET" />
第三步:进行网络请求:
1. 创建客户端
2. 创建请求
3. 使用客户端发送异步请求
4. 创建回调方法
5. 处理返回结果
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://api.vvhan.com/api/mobil.girl?type=json")
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
Log.i("onFailure","fail");
}
@Override
public void onResponse(@NonNull Call call, @NonNull Response response)
throws IOException {
result = response.body().string();
handler.sendEmptyMessage(0x111);
Log.i("onResponse", result);
}
});
第四步:Handler
private Handler handler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if(msg.what == 0x111) {
try {
JSONObject object = new JSONObject(result);
String imgurl = object.getString("imgurl");
Glide.with(MainActivity.this).load(imgurl).into(iv_show);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
};
3.OKHTTP的同步POST使用步骤
第一步:添加依赖
implementation("com.squareup.okhttp3:okhttp:4.10.0")
第二步:添加网络权限
在AndroidManifest.xml添加Internet
<uses-permission android:name="android.permission.INTERNET" />
第三步:进行网络请求:
1. 创建线程
2. 创建客户端
3. 构建请求体,将传递参数放到请求体中
4. 创建请求
5. 使用客户端发送请求
6. 处理返回结果
new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient client = new OkHttpClient();
MediaType mediaType =
MediaType.Companion.parse("application/json;charset=utf-8");
RequestBody stringBody = RequestBody.Companion.create(param,
mediaType);
Request request = new Request.Builder()
.url("http://192.168.17.181:8080/TestWeb_war_exploded/login")
.post(stringBody)
.build();
try (Response response = client.newCall(request).execute()){
result = response.body().string();
handler.sendEmptyMessage(0x111);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
第四步:Hander
private Handler handler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if (msg.what == 0x111) {
Toast.makeText(LoginActivity.this, result,
Toast.LENGTH_SHORT).show();
}
}
};
4.OKHTTP的异步POST使用步骤
第一步:添加依赖
implementation("com.squareup.okhttp3:okhttp:4.10.0")
第二步:添加网络权限
在AndroidManifest.xml添加Internet
<uses-permission android:name="android.permission.INTERNET" />
第三步:进行网络请求:
1. 创建客户端
2. 构建请求体,将传递参数放到请求体中
3. 创建请求
4. 使用客户端发送请求
5. 创建回调方法
6. 处理返回结果
OkHttpClient client = new OkHttpClient();
MediaType type = MediaType.Companion.parse("application/json;charset=utf8");
RequestBody requestBody = RequestBody.Companion.create(param, type);
Request request = new Request.Builder()
.url("http://192.168.17.181:8080/TestWeb_war_exploded/login")
.post(requestBody)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
Log.e("onFailure","fail");
}
@Override
public void onResponse(@NonNull Call call, @NonNull Response
response) throws IOException {
result = response.body().string();
handler.sendEmptyMessage(0x111);
}
});
第四步:Haander
private Handler handler = new Handler(Looper.getMainLooper()){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if (msg.what==0x111) {
Toast.makeText(MainActivity2.this, result, Toast.LENGTH_SHORT).show();
}
}
};
5.总结:
1. 同步需要开启线程,异步不需要开启线程
2. 同步和异步都需要跳转到UI线程修改UI