У меня проблема, и я не знаю, как от нее избавиться. Иногда (это основная проблема, просто иногда) У меня такое исключение:
07-23 01:18:14.198: W/System.err(31750): java.net.SocketTimeoutException
07-23 01:18:14.198: W/System.err(31750): at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
07-23 01:18:14.198: W/System.err(31750): at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37)
07-23 01:18:14.198: W/System.err(31750): at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)
07-23 01:18:14.198: W/System.err(31750): at com.android.okio.Okio$2.read(Okio.java:116)
07-23 01:18:14.198: W/System.err(31750): at com.android.okio.RealBufferedSource.indexOf(RealBufferedSource.java:150)
07-23 01:18:14.198: W/System.err(31750): at com.android.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:97)
07-23 01:18:14.198: W/System.err(31750): at com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:202)
07-23 01:18:14.198: W/System.err(31750): at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:119)
07-23 01:18:14.198: W/System.err(31750): at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:798)
07-23 01:18:14.198: W/System.err(31750): at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:405)
07-23 01:18:14.198: W/System.err(31750): at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:349)
07-23 01:18:14.198: W/System.err(31750): at com.android.okhttp.internal.http.HttpURLConnectionImpl.getHeaderFieldKey(HttpURLConnectionImpl.java:174)
Я знаю, что в основном является socketTimeoutException, но здесь проблема в том, что это не может случиться (или, по крайней мере, не так много), поскольку сервер является локальным и подключен к тому же маршрутизатору, к которому подключен телефон (я пробовал с другим маршрутизатором, та же проблема ). И, конечно, сервер работает отлично (когда у меня есть ошибка в приложении, журнал на сервере показывает, что сервер никогда не получает никаких запросов). Итак, что может сделать, что у меня иногда (2-10 раз в день) есть java.net.SocketTimeoutException, который я не могу воспроизвести (просто повторяя тот же самый запрос, и он работает нормально).
Я использую дельфи TNetHttpClient (не знаю, имеет ли это значение), который внутренне использует HttpURLConnection
Также что я могу сделать, чтобы отладить эту ошибку, чтобы выяснить, в чем истинная причина java.net.SocketTimeoutException?
@AnjaniMittal спасибо, к сожалению, эта статья слишком универсальна для сокета, это не помогло :( Я не использую сокет напрямую, просто с помощью httpUrlConnection, моя проблема в том, чтобы понять, что вызывает тайм-аут сокета, потому что он наверняка находится в программном обеспечении, а не в оборудовании /сеть
Это происходит на одном конкретном устройстве или на нескольких?
Также вам может быть интересно посмотреть: stackoverflow.com/questions/9094227/…. Они говорят о «близком» методе, но я не могу найти его. Возможно, поможет изменение тайм-аута чтения?
@DaveNottage: это происходит на нескольких устройствах, но только для моего приложения для Android delphi. у меня никогда не было такой ошибки ни в одном другом приложении, которое я использовал
@DaveNottage: хммм, очень интересно, если это тот шов, который является ошибкой в TnetHttpClient, но мне нужно разобраться. не уверен, что это нужно для расследования
@DaveNottage: не уверен, что это близко, и даже не очень хорошо закрывать соединение, которое поддерживает работу. Я использую (и повторно использую) всегда один и тот же клиент nethttpclient