OkHttp EventListener: значение byteCount всегда равно нулю в обратном вызове responseBodyEnd - PullRequest
0 голосов
/ 04 октября 2019

Я использую EventListener обратный вызов для некоторого анализа в моем приложении, но я столкнулся с проблемой, когда я не получаю правильное значение byteCount в responseBodyEnd обратном вызове. Это всегда 0.

Я прилагаю код ниже.

val client = OkHttpClient.Builder()
             .eventListenerFactory(HttpEventListenerFactory.FACTORY)
             .build()

val request = Request.Builder()
              .url("http://jsonplaceholder.typicode.com/comments?postId=1")
              .build()

 with(client) {
     newCall(request).enqueue(object : Callback {
        override fun onFailure(call: Call, e: IOException) {
            Log.d("OkHttp##", "Request failed")
        }

        override fun onResponse(call: Call, response: Response) {
            handleResponse(response.body())
            response.close()
            Log.d("OkHttp##", "Response received")
        }
     })
 }

MyEventListenerImpl.kt

public class HttpEventListenerFactory extends EventListener {
    public static final Factory FACTORY = new Factory() {

    final AtomicLong nextCallId = new AtomicLong(1L);

    @Override
    public EventListener create(Call call) {
            long callId = nextCallId.getAndIncrement();
            Log.d("OkHttp##", "next call id : " + nextCallId);
            String message = String.format(Locale.US, "%04d %s%n", callId, call.request().url());
            Log.d("OkHttp##", message);
            return new HttpEventListenerFactory(callId, System.nanoTime());
        }
    };

@Override
public void responseBodyEnd(Call call, long byteCount) {
    // this method never gets called
    // byteCount here is always 0
    printEvent("Response body end", callId);
}
...