안드로이드를 통해 내 Axis2 웹 서비스에서 데이터를 요청할 때 KSOAP2 호출이 시간 초과되는 것을 막으려 고했지만 그렇게 할 수 없었습니다.안드로이드에서 두려운 KSOAP2 연결 시간 초과를 방지하는 방법
웹 서비스의 배경.
내 웹 서비스는 Apache Tomcat 서버에서 실행되며 스테이션에 대한 실시간 정보를 반환하는 데 사용됩니다. 브라우저를 통해 시도 할 때 예상대로 작동하고 웹 사이트에서도 예상대로 작동합니다. 내 안드로이드 응용 프로그램에서 같은 방법을 사용하려고하면
문제점
그러나 때때로 나는 다음과 같은 스택 추적 오류가 발생합니다. 요청이 성공할 수있는 다른 시간입니다. 때로는 요청이 즉시 시간 초과되고 다른 시간은 시간이 초과되기 전에 1 분 정도 기다릴 것입니다.
장치
나는 삼성 갤럭시 SII (플랫폼 2.3.3)을 통해 삼성 갤럭시 SI (플랫폼 2.2.2) 무선 랜을 사용하여 동일한 결과와 3G를 사용하여 그것을 시도했다. 그러나 에뮬레이터 (플랫폼 2.2)를 통해 사용할 때 시간이 절대로되지 않습니다.
내 코드 나는 2.5.7 2.4에서 KSOAP2를 업데이트하고 시간 제한을 설정하려고하지만 난 그렇게 실패되었습니다 한
04-13 13:07:18.015: W/System.err(9249): java.net.SocketTimeoutException
04-13 13:07:18.015: W/System.err(9249): at org.apache.harmony.luni.net.PlainSocketImpl.read(PlainSocketImpl.java:461)
04-13 13:07:18.015: W/System.err(9249): at org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:85)
04-13 13:07:18.015: W/System.err(9249): at org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:65)
04-13 13:07:18.015: W/System.err(9249): at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:140)
04-13 13:07:18.015: W/System.err(9249): at java.io.BufferedInputStream.read(BufferedInputStream.java:225)
04-13 13:07:18.020: W/System.err(9249): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.readLine(HttpURLConnectionImpl.java:660)
04-13 13:07:18.020: W/System.err(9249): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.readResponseHeaders(HttpURLConnectionImpl.java:690)
04-13 13:07:18.020: W/System.err(9249): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1040)
04-13 13:07:18.020: W/System.err(9249): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:512)
04-13 13:07:18.020: W/System.err(9249): at org.ksoap2.transport.ServiceConnectionSE.openInputStream(ServiceConnectionSE.java:113)
04-13 13:07:18.020: W/System.err(9249): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:160)
04-13 13:07:18.050: W/System.err(9249): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95)
04-13 13:07:18.050: W/System.err(9249): at ie.smartcommuter.models.Station.getRealTimeData(Station.java:123)
04-13 13:07:18.050: W/System.err(9249): at ie.smartcommuter.controllers.tabcontents.StationRealtimeActivity$1.run(StationRealtimeActivity.java:95)
04-13 13:07:18.050: W/System.err(9249): at java.lang.Thread.run(Thread.java:1019)
String NAMESPACE = "http://service.domain.ie";
String URL = "http://www.myhost.com/axis2/services/RealTime?wsdl";
String METHOD_NAME = "getStationData";
String SOAP_ACTION = "RealTime";
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("stationType", getStationType());
request.addProperty("stationApiCode", getApiCode());
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport;
SoapObject response = null;
try {
androidHttpTransport = new HttpTransportSE(URL,60000); // Tried Setting the Timeout to 1 Minute
androidHttpTransport.debug = true;
androidHttpTransport.call(SOAP_ACTION,envelope);
response = (SoapObject)envelope.bodyIn;
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
스택 추적 오류 멀리. 그래서 내 질문에 도달 :
다른 사람이이 문제가 있었나요? 그렇다면 어떻게 해결 했습니까?
는'TIMEOUT = 20000로 제한 시간으로 시도해야 원하는대로 타임 아웃을 처리해야한다'당신'새로운 HttpTransportSE에서 (URL, 60000); ' – Herry