2013-04-25 23 views
15

Khi sử dụng thư viện loopj AsyncHttpClient, tôi tiếp tục nhận được java.net.SocketTimeoutExceptions khi thực hiện yêu cầu (xem bên dưới).Nhận SocketTimeoutExceptions sử dụng loopj AsyncHttpClient ... có giá trị thời gian chờ nào tôi có thể đặt không?

Có giá trị thời gian chờ nào tôi có thể đặt không?

Lưu ý: Tôi đăng bài này để hy vọng cung cấp một số trợ giúp cho người khác. Tôi (ngớ ngẩn) vật lộn để tìm ra giải pháp trong một thời gian.

Stack trace:

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) 

Trả lời

37

tôi phát hiện ra rằng AsyncHttpClient thực sự giá trị mặc định để một thời gian chờ 10 giây. Nếu yêu cầu của bạn mất nhiều thời gian hơn, bạn sẽ thấy SocketTimeoutException được ném.

Điều chỉnh điều này thực sự đơn giản. Chỉ cần làm như sau:

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

Sửa: (! Cảm ơn, Horkavlna)

Bạn có thể xem chi tiết của phương pháp này trong javadoc - http://loopj.com/android-async-http/doc/com/loopj/android/http/AsyncHttpClient.html#setTimeout(int)

+1

là thời gian chờ trong mili giây ? Dường như không có tài liệu về điều này cả. – Manuel

+1

@ dragon112 Thời gian chờ tính bằng mili giây. Trong ví dụ trên, tôi sẽ đặt thời gian chờ thành 20 giây. – loeschg

+1

bạn có thể tìm thấy nó trong JAVADOC http://loopj.com/android-async-http/doc/com/loopj/android/http/AsyncHttpClient.html#setTimeout(int) – horkavlna

Các vấn đề liên quan