图片发自简书App
OkHttp不需要多介绍了,已经是网络框架界的大佬了,很多网络框架都基于OkHttp封装,也有很多涉及到网络的第三方框架都可以支持使用OkHttp替换网络。
OkHttp的4.0.x版本已经全部由java替换到了Kotlin,API的一些使用也会有些不同,具体的参考Upgrading to OkHttp 4
由于不熟悉Kotlin代码,本文使用的OkHttp的版本为3.14.2,是3.14.x的最后一个版本
接入
OkHttp在3.13.x以上的版本需要在Android 5.0+ (API level 21+)和Java 1.8的环境开发。
同时还需要再添加Okio的依赖库,而Okio在1.x版本是基于Java实现的,2.x则是Kotlin实现的。
dependencies {
//...
//OkHttp
implementation 'com.squareup.okhttp3:okhttp:3.14.2'
implementation 'com.squareup.okio:okio:1.17.4'
}
3.12.x以及以下的版本支持Android 2.3+ (API level 9+)和Java 1.7的开发环境
Get请求
请求分为同步请求和异步请求,先看看同步请求
public void getSyn(final String url) {
new Thread(new Runnable() {
@Override
public void run() {
try {
//创建OkHttpClient对象
OkHttpClient client = new OkHttpClient();
//创建Request
Request request = new Request.Builder()
.url(url)//访问连接
.get()
.build();
//创建Call对象
Call call = client.newCall(request);
//通过execute()方法获得请求响应的Response对象
Response response = call.execute();
if (response.isSuccessful()) {
//处理网络请求的响应,处理UI需要在UI线程中处理
//...
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
这就是一段同步Get请求的代码,同步网络请求需要在子线程中执行,而处理UI需要回到UI线程中处理。
在看看Get的异步请求,这时就不需要自己创建子线程了,但是处理UI同样需要在UI线程中处理,不能再请求响应的回调方法中处理
public void getAsyn(String url) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//...
}
@Override
public void onResponse(Call call, Resp