OkHttp:拦截器之网络请求Log
2017-12-01 11:27
260 查看
主要用来日志输出网络请求的参数及回调的实体类信息:
最近研究了Retrofit框架 ,准备接入项目中 ,发现网络请求没有任何参数提示,后来想到使用拦截器,打印rul和参数及实体类的回调。直接上代码吧
然后直接在okhttp上面添加拦截器
日志显示可以根据Debug和release版本是否显示日志
最后附上效果图吧
最近研究了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; } } }
最后附上效果图吧
相关文章推荐
- 网络请求工具类之OkHttp3封装(支持缓存、日志、拦截器、断点下载、上传等)
- 网络请求Okhttp封装加单例加拦截器 结合MVP
- [置顶] Android OkHttp网络请求拦截器
- Android——自定义拦截器实现OKHttp网络请求
- Android——自定义拦截器实现OKHttp网络请求
- 还不会使用OkHttp和Retrofit进行Android网络请求?看看这篇你就会了!
- OkHttp网络请求框架的使用
- OkHttp的基本使用-3(添加拦截器和GET请求的参数拼接)
- Android 网络请求库:okHttp
- 添加 retrfiot 拦截器Interceptor ,打印服务器返回的json并添加网络请求公共的header
- OKHttp网络请求简单介绍
- 使用 Android OkHttp网络请求时,关于传参数的注意事项
- RxAndroid+RxJava+Gson+retrofit+okhttp初步搭建android网络请求框架
- Android 的OkHttp 网络请求框架的学习封装
- OkHttp网络请求
- 使用Okhttp网络请求下载图片到指定文件夹
- 使用MVP注册登录模块+封装的OKhttp,拦截器+QQ第三方登录+RecyclerView+SpringView上拉加载下拉刷新网络数据
- okHttp发起网络请求
- Android 网络请求框架 OkHttp 的使用
- Android okHttp网络请求之文件上传下载