OkHttp总结

一.基础用法

2.和Retrofit集成:

二.拓展用法

1.和Stetho进行集成

Stetho由Facebook出品,是一个调试应用网络请求的实用工具,它借助Chrome的开发者工具的能力,来查看OkHttp发出的请求和接收到的回复。

我们可以往network interceptors中加上它:

1
okHttpClient.networkInterceptors().add(new StethoInterceptor());

运行应用,然后在chrome上访问 chrome://inspect ,设备和应用的标示会出现在列表中,点击“inspect”链接进入到对应的开发者工具页面,之后打开network页面,你就看到这些网络请求啦。

2.指定一个user agent interceptor

我们为了分析log和统计,需要客户端每次请求都提供一个 User-Agent,OkHttp当然提供了这个,不过默认值是它的版本号。
我们可以手动通过创建一个interceptor来修改这个值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public final class UserAgentInterceptor implements Interceptor {
private static final String USER_AGENT_HEADER_NAME = "User-Agent";
private final String userAgentHeaderValue;

public UserAgentInterceptor(String userAgentHeaderValue) {
this.userAgentHeaderValue = Preconditions.checkNotNull(userAgentHeaderValue);
}

@Override
public Response intercept(Chain chain) throws IOException {
final Request originalRequest = chain.request();
final Request requestWithUserAgent = originalRequest.newBuilder()
.removeHeader(USER_AGENT_HEADER_NAME)
.addHeader(USER_AGENT_HEADER_NAME, userAgentHeaderValue)
.build();
return chain.proceed(requestWithUserAgent);
}
}

可以试着传一些有意义的容易区别的关键词,比如下面的一些:

Build.MODEL
Build.BRAND
Build.VERSION.SDK_INT
BuildConfig.APPLICATION_ID
BuildConfig.VERSION_NAME
BuildConfig.VERSION_CODE

后面的三个参数的设置可以参考对您的应用进行版本控制设置应用 ID

3.设置一个有意义的超时:

OkHttp在2.5.0后就开始存在超时机制,当建立链接后,收到数据或者写回数据超过10s就会发生超时。
我们可以通过override掉 setConnectTimeout, setReadTimeout 或 setWriteTimeout 来设置对应的超时。
我们一般会把OkHttp和Retrofit一起使用,Retrofit默认的超时是:
连接超时—> 15s.
读取超时—> 20s.
没有写超时