2013-04-25 3 views
15

При использовании библиотеки loopj AsyncHttpClient, я продолжаю получать java.net.SocketTimeoutException при выполнении запросов (см. Ниже).Получение SocketTimeoutExceptions с использованием loopj AsyncHttpClient ... есть ли значение тайм-аута, которое я могу установить?

Есть ли значение тайм-аута, которое я могу установить?

Примечание: Я размещаю это, чтобы надеяться, предоставит некоторую помощь другим людям. Я (глупо) изо всех сил пытался найти решение в течение некоторого времени.

Стек след:

java.net.SocketTimeoutException 
at java.net.PlainSocketImpl.read(PlainSocketImpl.java:491) 
at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46) 
at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240) 
at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103) 
at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:191) 
at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:82) 
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174) 
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:180) 
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235) 
at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259) 
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279) 
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121) 
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:428) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
at com.loopj.android.http.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:76) 
at com.loopj.android.http.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:95) 
at com.loopj.android.http.AsyncHttpRequest.run(AsyncHttpRequest.java:57) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390) 
at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
at java.lang.Thread.run(Thread.java:856) 

ответ

37

я обнаружил, что на самом деле AsyncHttpClient по умолчанию 10 секунд ожидания. Если ваш запрос занимает больше времени, вы увидите брошенное SocketTimeoutException.

Корректировка на самом деле проста. Просто сделайте следующее:

final int DEFAULT_TIMEOUT = 20 * 1000; 
AsyncHttpClient aClient = new AsyncHttpClient(); 
aClient.setTimeout(DEFAULT_TIMEOUT); 
//... continue as normal 

Редактировать: (! Спасибо, Horkavlna)

Вы можете увидеть детали метода в Javadoc - http://loopj.com/android-async-http/doc/com/loopj/android/http/AsyncHttpClient.html#setTimeout(int)

+1

ли время ожидания в миллисекундах ? Кажется, нет никакой документации по этому поводу. – Manuel

+1

@ dragon112 Таймаут в миллисекундах. В приведенном выше примере я устанавливаю тайм-аут на 20 секунд. – loeschg

+1

вы можете найти его в JAVADOC http://loopj.com/android-async-http/doc/com/loopj/android/http/AsyncHttpClient.html#setTimeout(int) – horkavlna