2013-04-25 6 views
15

Quando si utilizza la libreria loopj AsyncHttpClient, continuo a ricevere java.net.SocketTimeoutExceptions quando si effettuano richieste (vedere di seguito).Ottenere SocketTimeoutExceptions utilizzando loopj AsyncHttpClient ... esiste un valore di timeout che posso impostare?

C'è un valore di timeout che posso impostare?

Nota: sto postando questo per fornire eventualmente un aiuto ad altre persone. Io (stupidamente) ho faticato a trovare la soluzione per qualche tempo.

traccia stack:

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) 

risposta

37

ho scoperto che il AsyncHttpClient effettivamente default ad un secondo timeout di 10. Se la tua richiesta richiede più tempo vedrai lanciata la SocketTimeoutException.

La regolazione di questo è davvero semplice. Basta effettuare le seguenti operazioni:

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

Edit: (! Grazie, Horkavlna)

È possibile visualizzare i dettagli del metodo nel Javadoc - http://loopj.com/android-async-http/doc/com/loopj/android/http/AsyncHttpClient.html#setTimeout(int)

+1

è il timeout in millisecondi ? Sembra che non ci sia alcuna documentazione su questo. – Manuel

+1

@ dragon112 Il timeout è in millisecondi. Nell'esempio sopra sto impostando il timeout su 20 secondi. – loeschg

+1

lo trovi in ​​JAVADOC http://loopj.com/android-async-http/doc/com/loopj/android/http/AsyncHttpClient.html#setTimeout(int) – horkavlna

Problemi correlati