У меня есть мобильное приложение, которое выполняет около 15 вызовов API к нашему REST API. Большинство из них - это GET, POST, PUT и содержат тело / ответ JSON небольшого или среднего размера. Мы используем OKHTTP3 3.8.1.
У нас есть один вызов API Gateway-> Lambda, который содержит тело JSON немного большего размера (менее 500 КБ).
Единственный вызов, который поступает в API Gateway, довольно часто терпит неудачу. Однако он терпит неудачу только при тестировании на Amazon Kindle Fire 7. Звонок работает на Kindle Fire 8, а также на всех других телефонах / планшетах Android, которые мы тестировали.
Я создал другое приложение для проверки этого вызова, используя скопированный код. В тестовом приложении вызов не проходит. Однако это приложение не выполняет другие наши вызовы и не использует BLE или какие-либо другие ресурсы.
В случае сбоя вызова сервер (шлюз API) вообще не получает запрос (ничего не регистрируется). Итак, я считаю, что проблема заключается в сбрасывании данных с планшета.
Это трассировка стека, которую мы получаем, когда он терпит неудачу.
java.net.SocketTimeoutException
at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37)
at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)
at okio.Okio$2.read(Okio.java:139)
at okio.AsyncTimeout$2.read(AsyncTimeout.java:237)
at okio.RealBufferedSource.indexOf(RealBufferedSource.java:345)
at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:217)
at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:211)
at okhttp3.internal.http1.Http1Codec.readResponseHeaders(Http1Codec.java:189)
at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:75)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at com.company.app.helpers.http.HTTPHelpers$LoggingInterceptor.intercept(HTTPHelpers.java:202)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at com.company.app.helpers.http.HTTPHelpers$HeaderInterceptor.intercept(HTTPHelpers.java:225)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:185)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:135)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Если у кого-то есть идеи о том, почему мы получаем эту ошибку и что, возможно, можно исправить, я был бы очень признателен за любой совет!
Edit - Мы пробовали увеличить тайм-аут, но звонок по-прежнему не уходит с планшета. Мы подтвердили, что звонок не покидает планшет через прокси.
Кроме того, похоже, что проблема связана с использованием BLE одновременно с HTTP.