3

Web サービスに接続して SoapObject を返す関数があります。この関数は、AsyncTask なしで直接呼び出すと問題なく動作しますが、次のコードでは例外がスローされます。助言がありますか?

 private class LoginTask extends AsyncTask<String, Object, Object> {
    protected SoapObject doInBackground(String... params) {
       try
       {
          return callWebService("a","a");           
       }
       catch (Exception e)
       {
          return null;
       }
    }
    protected void onPostExecute(SoapObject result) {
        setErrorText(result);
    }

 }

private SoapObject callWebService(String UserName, String Password) {

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    request.addProperty("UserName", UserName);
    request.addProperty("Password", Password);

    SoapSerializationEnvelope envelope = new    SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);

    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
    androidHttpTransport.debug = true;

    try {
        androidHttpTransport.call(SOAP_ACTION, envelope);
        SoapObject response = (SoapObject) envelope.getResponse(); //this code causes the problem
        return response;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    } catch (XmlPullParserException e) {
        e.printStackTrace();
        return null; //Directly jumps to here
    }

}
4

1 に答える 1

0

タスクの宣言を次のように変更した場合:

    private class LoginTask extends AsyncTask<String, Object, Object>

    private class LoginTask extends AsyncTask<String, Object, SoapObject>

onPostExecute() が実行されるはずです。

于 2012-11-28T16:48:18.310 に答える