说明:
做项目Spotify 实现OAuth2.0登录 根据API进行数据获取、交互等,获取的令牌有效期只有30分钟,令牌失效那么API获取数据就会失败,这就要实现令牌过期自动刷新功能了。另外API中接口使用了POST、GET、PUT、DELETE等请求方式,我们不可能每次都要去写这些不同网络请求,于是有了封装网络请求通吃POST、GET、PUT、DELETE等请求方式并实现自动刷新令牌
代码其中第一个没有传入Context上下文参数的是不带菊花的,因为有时候需要直接加载或者默默加载数据,第二种是带菊花的提示用户,菊花下面默认的是"",也就是没写loading...这种。
/**
* SptNetwork
* Create by lxy on 2021/5/17 3:32 PM
* Copyright © 2021 lxy. All rights reserved.
**/
public class SptNetwork {
public static final String GET = "get";
public static final String POST = "post";
public static final String DELETE = "delete";
public static final String PUT = "put";
/**
* 网络请求封装 使用拦截器
*
* @param url 网络地址
* @param json 参数String
* @param type 类型 get、post、put、delete
* // * @param isShowDialog 是否展示菊花
* // * @param context 上下文
* @param listener 回调
*/
public static void Request(String url, String json, String type, HttpListener listener) {
OkHttpClient http = new OkHttpClient().newBuilder().
addInterceptor(new OAuthRequestInterceptor())
.connectTimeout(15, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.build();
Request.Builder builder = null;
if (type.equals(GET)) {
builder = new Request.Builder().get();
} else if (type.equals(POST)) {
RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), json);
builder = new Request.Builder().post(requestBody);
} else if (type.equals(PUT)) {
RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), json);
builder = new Request.Builder().put(requestBody);
} else if (type.equals(DELETE)) {
RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), json);
builder = new Request.Builder().delete(requestBody);
}
final Request request = builder
.url(url)
.addHeader("Authorization", "Bearer " + SptConfig.session().access_token)
.build();
Call call = http.newCa