访问改造服务器请求和响应时间 Android

SoH*_*SoH 3 android retrofit

我可以看到,每当我进行 web svc 调用时,我都会在日志中得到响应。但是我发现很难在我的代码中实际访问这些信息。例如,我如何找出我可以从以下日志中看到的服务器请求时间和响应时间。

HTTP/1.1 200 OK
Connection: keep-alive
Content-Type: application/json;charset=UTF-8
Date: Tue, 21 Oct 2014 12:35:26 GMT
OkHttp-Received-Millis: 1413894922514
OkHttp-Response-Source: NETWORK 200
OkHttp-Selected-Protocol: http/1.1
OkHttp-Sent-Millis: 1413894921354
Server: Apache-Coyote/1.1
transfer-encoding: chunked
Run Code Online (Sandbox Code Playgroud)

Pra*_*nik 5

我正在使用的库和版本:

Retrofit 版本 : 2.1.0

okhttp 版本 : 3.3.1

logging-interceptor 版本 : 3.3.1

此方法仅适用于onResponse().

如果您调试onResponse(),您将在部件中看到sentRequestAtMillis& receivedResponseAtMillisrawResponse如下图所示。

这些参数分别保存发出请求和接收响应的时间(以毫秒为单位)。

在此处输入图片说明

以下示例说明了如何在收到响应后以编程方式获取这些参数中的值。

retrofitRequest.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> 
        // time when the request was made to server, which you get from ```sentRequestAtMillis```
        long requestTime = response.raw().sentRequestAtMillis();

        // time when the response was received, which you get from ```receivedResponseAtMillis```
        long responseTime = response.raw().receivedResponseAtMillis();

        //time taken to receive the response after the request was sent
        long apiTime =  responseTime - requestTime;
    }

    @Override public void onFailure(Call<ResponseBody> call, Throwable t) {

    }
});
Run Code Online (Sandbox Code Playgroud)

请注意,您可能需要处理可能发生的任何异常的代码。