のAndroid(4.3以前)の旧バージョンで、次のスタックを見て:okhttp3.internal.Util.closeQuietlyからでIncompatibleClassChangeError()
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)
これはどこjava.net.Socket
、okhttpとJava 6の間の非互換性を示唆しているようですCloseable
を実装していません。
この問題は、主にストリームが失敗したために発生しているようです。私たちは、クライアント側での流れの障害を強制的に(https://stackoverflow.com/a/141026/315702から借りた)このPHPページを呼び出し開始までは再現が困難であった:
<?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:+、我々はロードに3.6.0-SNAPSHOTを避けることができました。ところで、良い分析! – CommonsWare
いくつかの開発者の集合IQがこの1つの底に到達するまでにかかりました。そして、ありがとう - 私は '+'依存関係が修正されたかどうかをチェックしようとしていました! – markproxy
ここに固定:https://github.com/square/okhttp/pull/3125 –