jul*_*iro 5 android json retrofit
我需要在 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;
});
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
拦截器接口允许您访问您发出的每个请求的请求正文。
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
// do what you want with request.body().contentLength();
return chain.proceed(request);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9005 次 |
| 最近记录: |