OkHttp:拦截器之网络请求Log
来源:互联网 发布:json.dump 格式化输出 编辑:程序博客网 时间:2024/06/05 12:42
主要用来日志输出网络请求的参数及回调的实体类信息:
最近研究了Retrofit框架 ,准备接入项目中 ,发现网络请求没有任何参数提示,后来想到使用拦截器,打印rul和参数及实体类的回调。直接上代码吧
public class MyInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); printRequestMessage(request); Response response = chain.proceed(request); printResponseMessage(response); return response; } /** * 打印请求消息 * * @param request 请求的对象 */ private void printRequestMessage(Request request) { if (request == null) { return; } Logger.d("Url : " + request.url().url().toString());// Logger.d("Method: " + request.method());// Logger.d("Heads : " + request.headers()); RequestBody requestBody = request.body(); if (requestBody == null) { return; } try { Buffer bufferedSink = new Buffer(); requestBody.writeTo(bufferedSink); Charset charset = requestBody.contentType().charset(); charset = charset == null ? Charset.forName("utf-8") : charset; Logger.d("Params: " + bufferedSink.readString(charset)); } catch (IOException e) { e.printStackTrace(); } } /** * 打印返回消息 * * @param response 返回的对象 */ private void printResponseMessage(Response response) { if (response == null || !response.isSuccessful()) { return; } ResponseBody responseBody = response.body(); long contentLength = responseBody.contentLength(); BufferedSource source = responseBody.source(); try { source.request(Long.MAX_VALUE); // Buffer the entire body. } catch (IOException e) { e.printStackTrace(); } Buffer buffer = source.buffer(); Charset charset = UTF_8; MediaType contentType = responseBody.contentType(); if (contentType != null) { charset = contentType.charset(); } if (contentLength != 0) { String result = buffer.clone().readString(charset); Logger.json( result); } }}
然后直接在okhttp上面添加拦截器
// 配置 client OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new MyInterceptor()) // 设置拦截器 .retryOnConnectionFailure(true) // 是否重试 .connectTimeout(5, TimeUnit.SECONDS) // 连接超时事件 .readTimeout(5, TimeUnit.SECONDS) // 读取超时时间// .addNetworkInterceptor(mTokenInterceptor) // 自动附加 token// .authenticator(mAuthenticator) // 认证失败自动刷新token .build(); // 配置 Retrofit mRetrofit = new Retrofit.Builder() .baseUrl(Api.BASE_URL) // 设置 base url .client(client) // 设置 client . addCallAdapterFactory(RxJavaCallAdapterFactory.create())//添加Rxjava使用 .addConverterFactory(GsonConverterFactory.create()) // 设置 Json 转换工具 .build();
日志显示可以根据Debug和release版本是否显示日志
/** * 初始化日志库的管理 * @param context */ private static void initLogger(@NonNull Context context) { // 在 debug 模式输出日志, release 模式自动移除 if (DebugUtil.isInDebug(context)) { Logger.init("MyProject").logLevel(LogLevel.FULL); } else { Logger.init("MyProject").logLevel(LogLevel.NONE); } } /** * 判断当前应用是否是debug状态 */public class DebugUtil { /** * 判断是否是debug状态 */ public static boolean isInDebug(Context context) { try { ApplicationInfo info = context.getApplicationInfo(); return (info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0; } catch (Exception e) { return false; } }}
最后附上效果图吧
阅读全文
1 0
- OkHttp:拦截器之网络请求Log
- okhttp拦截器网络请求
- Android----OKHttp网络请求-拦截器
- Android OkHttp网络请求拦截器
- Okhttp简易log拦截器
- Okhttp网络拦截器
- okhttp网络拦截器
- Android——自定义拦截器实现OKHttp网络请求
- Android——自定义拦截器实现OKHttp网络请求
- 网络请求Okhttp封装加单例加拦截器 结合MVP
- OkHttp数据请求和OkHttp拦截器
- OkHttp之拦截器
- OkHttp中Interceptor拦截器之公共参数请求封装
- OkHttp封装+网络拦截器
- okhttp拦截器添加请求头
- 自定义OKhttp拦截器 添加请求头
- OkHttp二次封装请求 拦截器
- OkHttp 3.7源码分析(二)——拦截器&一个实际网络请求的实现
- 蚊子看了想咬人,人类看了都说好
- Mac 下WebStorm 常用快捷键
- 公有云的云主机实例在停机状态下是否收费?
- 【openpyxl】openpyxl对Excel表格的创建与写操作例程
- 大数据知识体系_探索数据_数据汇总_可视化_多维数据分析
- OkHttp:拦截器之网络请求Log
- Unhandled event loop exception No more handles 解决办法(已解决)
- java list 交集 并集 差集 去重复并集
- jQuery教程 3 选择器
- 机器学习(29)之奇异值分解SVD原理与应用详解
- mysql安装与修改root密码
- listview点击失效解决
- typedef和define具体的详细区别
- libqrencode生成二维码并保存成bmp图片