问题,
1 由于Retrofit默认连接超时时间只有10s 某些情况下可能连接时间会超过10s,这个时候就会报出SocketTimeoutException 这个时候我们就需要自己设置超时间,
2 很多时候需要查看自己请求的网络地址,或者请求参数,当然也可以借助抓包工具,通过OKHttp自带的可以支持打印Log,我们在控制台就可以看见请求信息或返回的数据,也不需要另外开工具,也还是比较方便。
解决办法
针对这2个问题写了一个工具类仅供参考,
需要打印Http请求地址等信息需要添加Gradle引用
compile 'com.squareup.okhttp3:logging-interceptor:3.1.2'
Retrofit默认支持OkHttp 所以不需要再额外添加。
工具类如下。
/**
* [description about this class]
*
* @author zhangqil
* @DATE 2017-04-11 15:21
* @copyright Copyright 2010 RD information technology Co.,ltd.. All Rights Reserved.
*/
public class RetrofitUtils {
private static RetrofitUtils mOkHttpUtils;
//解决优化查询超时问题 默认10s
private static final int DEFAULT_TIMEOUT = 30; //此处默认超时时间为30s
private TimeUnit mTimeUnitSECONDS = TimeUnit.SECONDS;
private OkHttpClient.Builder build = new OkHttpClient.Builder();
private RetrofitUtils() {
}
public static RetrofitUtils getInstance() {
if (mOkHttpUtils == null) {
mOkHttpUtils = new RetrofitUtils();
}
return mOkHttpUtils;
}
public OkHttpClient build() {
return build.build();
}
/***
* 添加超时时间
*
* @param timeOut 超时时间 单位秒
* @return
*/
public RetrofitUtils addTimeOut(int timeOut) {
if (timeOut <= 0) timeOut = DEFAULT_TIMEOUT;
build.connectTimeout(timeOut, mTimeUnitSECONDS)
.writeTimeout(timeOut, mTimeUnitSECONDS)
.readTimeout(timeOut, mTimeUnitSECONDS);
return this;
}
/***
* 添加http请求log 包括请求url 请求参数 返回的参数 等信息。
*
* @return
*/
public RetrofitUtils addHttpLog() {
//日志显示级别
HttpLoggingInterceptor.Level level = HttpLoggingInterceptor.Level.BODY;
//新建log拦截器
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
if (BuildConfig.DEBUG) {
Log.i("httpLog", "message:" + message);
}
}
});
loggingInterceptor.setLevel(level);
//OkHttp进行添加拦截器loggingInterceptor
build.addInterceptor(loggingInterceptor);
return this;
}
}
如何使用:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(You BASE_URL)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create()) //此处是添加Rxjava支持
.addConverterFactory(GsonConverterFactory.create()) //添加Gson支持
.client(RetrofitUtils.getInstance().addTimeOut(30).addHttpLog().build()) //构建自己的OkHttpClient
.build();
版权声明:本文为xiaxiayige原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。