Android开发-----关于解决Retrofit打印HttpLog和设置连接超时的问题
来源:互联网 发布:suse linux 扩磁盘 编辑:程序博客网 时间:2024/05/19 23:24
问题,
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();
0 0
- Android开发-----关于解决Retrofit打印HttpLog和设置连接超时的问题
- C#Socket开发“网络连接超时设置Timeout”,解决网络连接速度过慢的问题
- 解决ssh超时断开连接的问题
- mysql连接超时问题的解决
- 解决ssh超时断开连接的问题
- 解决secureCRT超时连接断开的问题
- android连接服务器端的连接超时问题
- 关于wcf 的连接超时问题
- 关于session的超时设置问题
- Socket关于设置连接超时
- 关于设置socket超时连接
- Retrofit设置请求超时
- Retrofit 设置 超时时间
- 解决使用MySQL C-API开发应用时的连接超时问题
- 解决使用MySQL C-API开发应用时的连接超时问题
- 关于android开发连接数据库的问题
- xfire设置连接超时问题
- Android之SOAP协议与服务器交互,解决连接超时的问题
- androidQQ登录获取用户信息
- JAVA函数、构造函数、重载、this
- oracle中merge使用
- 设计模式的七大准则
- 计算机图形学作业-运用数值微分法和中点作圆法使用Python的OpenGL库画出时钟
- Android开发-----关于解决Retrofit打印HttpLog和设置连接超时的问题
- 区块链 Hyperledger
- Python学习笔记(五)
- ORACLE 10g关于全局数据库名和SID的简介
- BottomBar有文字的情况
- Windows下编码在Linux系统下中文乱码解决方案
- 【google code jam Qualification Round 2017】【Oversized Pancake Flipper】【贪心】
- Java数组类型的定义和初始化
- 7.Django入门:教程-测试