1. 使用AndroidStudio开发,在app的build.gradle文件中增加对okhttp3的依赖:
dependencies {
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
}
2.网络请求需要申请网络权限,需要在AndroidManifest.xml配置:
<uses-permission android:name="android.permission.INTERNET" />
3OkHttpClient是通过OkHttpClient.Builder来配置参数,基础参数如下:
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(10, TimeUnit.SECONDS) //第一个参数是数字 第二个参数是相对应第一个参数的时间概念(我这快用的是秒)
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.build();
4 .普通GET请求(同步/异步)
// 创建请求体
Request request = new Request.Builder()
.url(url) // 请求地址
.get() // get请求 不写可以默认是get
.addHeader("name", "value") // 请求头参数
.tag("getSync") // 为当前request请求增加tag,可在okHttpClient中使用tag获取到当前请求
.build();
Call call = LOkHttp3Utils.okHttpClient().newCall(request);
// 同步请求 必须是在子线程内进行
new Thread(new Runnable() {
@Override
public void run() {
Response response = call.execute();
}
}).start();
// 异步请求
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.i("", "");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
int code = response.code(); //更新UI必须在主线程更新 异步请求自动是子线程内进行的
if (code == 200) {
String result = response.body().string();
Log.i("r", result);
}
else {
Log.e("e", response.message())
}
}
});
5 .普通GET请求(同步/异步)
/*如果用FormBody 发送post表单请求,就不能设置编码格式,contentType方法没有暴露出来,默认也不是UTF-8,参数是汉字就会乱码。
所以换一种方式 ,用 RequestBody */
public static final MediaType FORM_CONTENT_TYPE
= MediaType.parse("application/x-www-form-urlencoded; charset=utf-8");
RequestBody requestBody = RequestBody.create(FORM_CONTENT_TYPE, path + "?qq=" + qq + "&pwd=" + pwd);
//FormBody
FormBody formBody = new FormBody.Builder()
.add("qq",qq)//参数名 参数
.add("pwd",pwd)
.build();*/
// 创建请求体
Request request = new Request.Builder()
.url(url)
.post(requestBody) // 或者是post(formBody)
.addHeader("name", "value")
.tag("postSync")
.build();
Call call = LOkHttp3Utils.okHttpClient().newCall(request);
// 同步请求
new Thread(new Runnable() {
@Override
public void run() {
Response response = call.execute();
}
}).start();
// 异步请求
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.i("", "");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
int code = response.code();
if (code == 200) {
String result = response.body().string();
Log.i("r", result);
}
else {
Log.e("e", response.message());
}
}
});