2013-04-25 3 views
15

loopj AsyncHttpClient 라이브러리를 사용할 때, 요청을 할 때 java.net.SocketTimeoutExceptions가 계속 발생합니다 (아래 참조).loopj AsyncHttpClient를 사용하여 SocketTimeoutExceptions 가져 오는 중 ... 설정 가능한 시간 초과 값이 있습니까?

설정할 수있는 시간 제한 값이 있습니까?

참고 : 나는 다른 사람들에게 도움이되기를 바랍니다. 나는 (어리석게도) 한동안 해결책을 찾는데 어려움을 겪었다.

스택 추적 :

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

나는 발견 10 초 시간 제한에 AsyncHttpClient 실제로 기본값이. 요청이 오래 걸리면 SocketTimeoutException이 발생합니다.

이 조정은 정말 간단합니다. 그냥 다음을 수행하십시오

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

편집 : (! 감사 Horkavlna) 당신은 자바 독의 방법의 세부 사항을 볼 수 있습니다

-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