0

私のアプリケーションは、ksoap2を使用してWebサービスに接続します。このアプリケーションを使用すると、ユーザーはWebサービスを提供するサーバーのIPアドレス/ URLを(設定で)変更できます。

問題は、ユーザーがIPアドレス/ URLを無効な場所に変更すると、アプリケーションが長時間ハングし、LogCatがアプリケーションが提供されたソケットの説明に接続できなかったことを示すことです。

これを修正するにはどうすればよいですか?Webサービスが見つからない場合にアプリケーションがハングするのを防ぐにはどうすればよいですか?

Webサービスが見つからない場合でも、アプリのUIをそのままにしておきたい。アプリケーションがハングしないようにする方法はありますか?

これは私のコードです。アプリケーションがハングしないようにするための手段を提案してください。

 private void getControlFromServer()  {
    // TODO Auto-generated method stub

    SoapObject request = new SoapObject(NAMESPACE, METHOD_GET_CONTROL);
    SoapSerializationEnvelope envelope = 
        new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);


HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);




     try {
             androidHttpTransport.call(SOAP_ACTION_GET_CONTROL, envelope);




            SoapObject result=(SoapObject)envelope.getResponse(); //To get the data.

            tvTemp.setText("Received :" + result.getProperty(0).toString()+ " : " + result.getProperty(1).toString() +  " : " + result.getProperty(2).toString() +  " : " + result.getProperty(3).toString() +  " : " + result.getProperty(4).toString() +  " : " + result.getProperty(5).toString() +  " : " + result.getProperty(6).toString());

     } catch (Exception e) {


            tvTemp.setText("Error");
            e.printStackTrace();

        }


}
4

1 に答える 1

1

ConnectionTimeOutHttpTransportSEオブジェクトに設定します。

最新のものを使用するksoap2APIバージョン2.5.7以降を使用する

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport;
SoapObject response = null;

try {
        androidHttpTransport = new HttpTransportSE(URL,6000); // 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();
    }
于 2012-06-20T11:18:15.740 に答える