我需要在我的Android应用程序上构建一个流量监视器,我需要存储我通过改造发送和接收的所有Json的大小.使用日志我可以看到它的实际大小,但我没有找到获取此信息的方法,所以我可以保存它.我无法获得response.raw,因为它已被解析为我的类.有没有办法实现这一目标?
编辑:标记的vadkou答案是最好的.
我没有创建一个新的拦截器,而是传递了lamda表达式:
httpClIEnt.addInterceptor( chain -> { okhttp3.Request request = chain.request(); okhttp3.Response response = chain.proceed(request); if(request.body()!=null) { long requestLength = request.body().contentLength(); Log.e("SERVICE GENERATOR", " CONTENT LENGTH" + requestLength); } long responseLength = response.body().contentLength(); Log.e("SERVICE GENERATOR", " RESPONSE LENGTH" + responseLength); return response; });
解决方法:
Retrofit 2在内部使用Okhttp,你可以配置Okhttp,而不必像VaIDen的回答那样通过在构建适配器时添加自定义拦截器来获取原始http响应,如下所示:
private Retrofit createRetrofit() { return new Retrofit.Builder() .baseUrl(END_POINT) // .addConverterFactory(...) // .addCallAdapterFactory(...) .clIEnt(createClIEnt()) .build();}private OkhttpClIEnt createClIEnt() { OkhttpClIEnt.Builder okhttpClIEntBuilder = new OkhttpClIEnt.Builder(); okhttpClIEntBuilder.addInterceptor(createYourInterceptor()); return okhttpClIEntBuilder.build();}
Interceptor接口允许您为每个请求访问请求体.
@OverrIDepublic Response intercept(Chain chain) throws IOException { Request request = chain.request(); // do what you want with request.body().contentLength(); return chain.proceed(request);}
总结 以上是内存溢出为你收集整理的android – Retrofit 2 – 是否有可能获得我发送和接收的JSON的大小?全部内容,希望文章能够帮你解决android – Retrofit 2 – 是否有可能获得我发送和接收的JSON的大小?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)