私はREST APIに対して約15回のAPI呼び出しを行うモバイルアプリを持っています。これらのほとんどはGET、POST、PUTであり、中小規模のJSON本体/応答を含んでいます。我々はOKHTTP3 3.8.1を使用しています。OKHTTP3 SocketTimeOutは特定のコールでのみ
API Gateway-> Lambdaには、少し大きめのJSON本体(500kb未満)が含まれています。
APIゲートウェイに送信される1回のコールでは、一貫して失敗します。ただし、Amazon Kindle Fire 7でテストすると失敗するだけです。この呼び出しは、Kindle Fire 8と、テストした他のすべてのAndroidスマートフォン/タブレットで動作します。
コピー貼り付けコードを使用してこの呼び出しをテストする別のアプリを作成しました。テストアプリでは、呼び出しは失敗しません。しかし、そのアプリは他の呼び出しを行っておらず、BLEやその他のリソースを使用していません。
呼び出しが失敗すると、サーバー(APIゲートウェイ)は要求を一切受信しません(Nothing is Logged)。だから私は問題がタブレットからデータを取得していると思う。
これは失敗したときに得られるスタックトレースです。
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)
誰もが、我々はこのエラーを取得していると、何が多分修正することができ、なぜ上の任意のアイデアを持っている場合、私は非常に何かアドバイスをいただければ幸いです!
編集 - タイムアウトを延長しようとしましたが、コールがまだタブレットを離れることはありません。電話がプロキシを使用してタブレットから離脱しないことを確認しました。
また、HTTPと同時にBLEを利用することに問題があるようです。
であなたのタイムアウトを増やしてみてください私たちは、タイムアウトを増加していると、コールはまだタブレットを残しません。 –