当前位置 : 主页 > 编程语言 > java >

okhttp下载文件内容乱码

来源:互联网 收集:自由互联 发布时间:2022-06-23
加日志拦截的原因,去掉就好 ======================================================================================================================== 前言 此篇博客只讲解okhttp的拦截器功能的详细使用,如果你还不

加日志拦截的原因,去掉就好

========================================================================================================================

前言

  此篇博客只讲解okhttp的拦截器功能的详细使用,如果你还不太了解okhttp可以参考我另外一篇博客 ​​Android 开发 框架系列 OkHttp使用详解​​

添加Interceptor的简单例子

在 ​​Android 开发 框架系列 OkHttp使用详解​​ 可以了解到okhttp的基本使用,初始化OkHttpClient的时候我们可以添加拦截器,如下:

// 配置一些信息进入OkHttpClient
mOkHttpClient = new OkHttpClient().newBuilder()
.connectTimeout(REQUEST_TIME, TimeUnit.SECONDS)
.readTimeout(REQUEST_TIME, TimeUnit.SECONDS)
.writeTimeout(REQUEST_TIME, TimeUnit.SECONDS)
.addInterceptor(new MyInterceptor())
.build();

如上代码,很简单,只要利用addInterceptor方法就可以添加拦截器,而自定义的拦截器只需要实现​​Interceptor​​接口就行了,如下所示:

public class MyInterceptor implements Interceptor {
...
}

 ​​在有简单的了解后,我们来讲解拦截器的一些使用情景.​​

修改header头部信息

在一些接口需要增加头部信息或者修改头部信息的时候,如果我们直接对Request请求里增加头部字段难免会有增加耦合的问题.而在拦截器里修改就可以避免严重的耦合,如下代码增加了Body的类型与token信息.

public class HttpHeaderInterceptor implements Interceptor {
private String token;

public HttpHeaderInterceptor(String token) {
this.token = token;
}

@Override
public Response intercept(@NonNull Chain chain) throws IOException {
// 配置请求头
String accessToken = "token";
Request.Builder builder = chain.request().newBuilder();
builder.header("Content-Type", "application/json") //增加body类型
.header("Accept", "application/json");
builder.header(accessToken, token); //增加token
Request request = builder.build();
return chain.proceed(request); //继续发送
}
}

拦截取消请求

public class HttpHeaderInterceptor implements Interceptor {
private String token;

public HttpHeaderInterceptor(String token) {
this.token = token;
}

@Override
public Response intercept(@NonNull Chain chain) throws IOException {
// 配置请求头
if (TextUtils.isEmpty(token)){
chain.call().cancel();
return null;
}
//略......
}
}

网络日志拦截

请注意! 如果你OkHttpClient需要用于下载文件请不要添加网络日志拦截,否则会影响流的回调

使用okhttp网络日志拦截器需添加以下依赖:
 

implementation 'com.squareup.okhttp3:logging-interceptor:3.6.0'

定义拦截器中的网络日志工具:
 

HttpLoggingInterceptor logInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {

@Override
public void log(String message) { Log.d("logInterceptor", message); } }); logInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); //设置拦截器,不要忘记设置日志的级别,否则会不回调数据

初始化OkHttpClient,并添加网络日志拦截器:

mOkHttpClient = new OkHttpClient.Builder()
.addInterceptor(logInterceptor) //设置拦截器 .build();

 


上一篇:Android Studio -Xlint:deprecation ���±��롣
下一篇:没有了
网友评论