Увидев следующий стек на старых версиях Android (4.3 и выше):IncompatibleClassChangeError из okhttp3.internal.Util.closeQuietly()
Caused by: java.lang.IncompatibleClassChangeError: interface not implemented
at okhttp3.internal.Util.closeQuietly(Util.java:100)
at okhttp3.internal.connection.StreamAllocation.streamFailed(StreamAllocation.java:332)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.recover(RetryAndFollowUpInterceptor.java:209)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:132)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:212)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:179)
at okhttp3.RealCall.execute(RealCall.java:63)
Это наводит на мысль, несовместимость между okhttp и Java 6, где java.net.Socket
не реализует Closeable
.
И проблема возникает, прежде всего, в результате отказавшего потока. Это было трудно воспроизвести, пока мы не начали называть эту страницу PHP (заимствованную из https://stackoverflow.com/a/141026/315702), что заставляет сбой потока на стороне клиента:
<?php
ob_end_clean();
header("Connection: close");
ignore_user_abort(true); // just to be safe
ob_start();
echo('Text the user will see');
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush(); // Strange behaviour, will not work
flush(); // Unless both are called !
sleep(30);
echo('Text user will never see');
?>
FWIW, похоже, они перестали использовать '+' по времени 'r2.1.1'. BTW, хороший анализ! – CommonsWare
Потребовалось коллективное IQ нескольких разработчиков, чтобы добраться до сути этого. И спасибо - я собирался проверить, была ли исправлена ошибка '+'! – markproxy
Исправлено: https://github.com/square/okhttp/pull/3125 –