android - Retrofit 2 - 是否可以获得我发送和接收的 JSON 的大小?

标签 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;

    });

最佳答案

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 接口(interface)允许您访问您发出的每个请求的请求正文。

@Override
public 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 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44629502/

相关文章:

javascript - JavaScript 对象字面量的有趣问题

java - Android:尝试使用 AsyncTask 和 JSON 下载图像时崩溃

java - 在 Java Android 中解码 JSON

java - 如何在 RetroFit 中使用 Gson 转换器?

android - Gradle Test Executor使用非零退出代码完成

android - 精确控制 Android 的 VectorDrawable 动画

java - Android 应用程序因 RuntimeException : Unable to instantiate activity, dident find 类而崩溃

java - Android Retrofit - 发送动态数量的 POST 参数

android - 使用 Retrofit Android 的相互身份验证

android - 无法在内部存储中创建文件