私は、Axis2 WebサービスからAndroid経由でデータを要求しても、それを行うことができなかったときに、KSOAP2呼び出しがタイムアウトしないようにしています。Androidで恐ろしいKSOAP2接続タイムアウトを防ぐ方法
Webサービスの背景。
My Web ServiceはApache Tomcatサーバー上で実行されており、ステーションのリアルタイム情報を返すために使用されます。私はブラウザを使ってみると期待どおりに動作し、ウェブサイトでは期待通りに動作します。私は私のAndroidアプリケーションで同じメソッドを使用しようとすると
問題
は、しかし、時々私は、次のスタックトラックエラーが発生します。他の時間は、要求が成功するでしょう。時々、要求はすぐにタイムアウトし、他の時間はタイムアウトするまで1分ほど待つことになります。
デバイス
私は、WiFiを使用して、同じ結果と3Gを使用してサムスンギャラクシーSII(プラットフォーム2.3.3)を通って、サムスンのギャラクシーSI(プラットフォーム2.2.2)上でそれを試してみました。ただし、エミュレータ(Platform 2.2)で使用するとタイムアウトすることはありません。
マイコード
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();
}
スタック・トレース・エラー
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)
私は2.4から2.5.7へのKSOAP2を更新し、タイムアウト制限を設定しようとしましたが、私はとても成功していないいます遠いだから私の質問に到達する:
誰かがこの問題を抱えていましたかもしそうなら、彼らはそれをどのように解決しましたか?
は 'TIMEOUT = 20000でタイムアウトを試してみて好きなようにタイムアウトを処理する必要があります;'あなた '新しいHttpTransportSE中(URL、60000); ' – Herry