2013-05-07 72 views
0

以下代碼的使用效果很好,但是,如果代碼正在執行並且連接突然丟失,則通常會發生錯誤。我在這個問題的底部報告的錯誤似乎開始接近行430,即:Android:使用AsyncTask調用Web服務時出現問題

androidHttpTransport.call(soap_action, envelope); 

下面是做我的工作的AsyncTask:

private class CheckUpdateTask extends AsyncTask<Void, Void, ArrayList<String>>{ 
      private SoapObject response = null; 
      ArrayList<String> methodsResult = new ArrayList<String>();  
    @Override 
     protected ArrayList<String> doInBackground(Void... params) { 
      // TODO Auto-generated method stub 
       SoapObject Request = new SoapObject(NAMESPACE,"CheckUpdate"); 
       Request.addProperty("Username", username); 
       Request.addProperty("Password", password); 

      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
      envelope.dotNet = true; 
      envelope.setOutputSoapObject(Request); 
      final String soap_action = NAMESPACE+"CheckUpdate"; 

      HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
      try { 
       androidHttpTransport.call(soap_action, envelope); //line 430, where error occurs! 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (XmlPullParserException e) { 
       e.printStackTrace(); 
          } 

      try { 
       response = (SoapObject)envelope.getResponse(); 
       ...here I use the returned data for build my array (methodsResult) 

      SoapObject pi = (SoapObject)response.getProperty(0); 
      } catch (SoapFault e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 


      return methodsResult; 
    } 

    @Override 
    protected void onPostExecute(ArrayList<String> result) { 
     // TODO Auto-generated method stub 
     String[] resultArr= result.toArray(new String[result.size()]); 
     new callWS().execute(resultArr); 

     super.onPostExecute(result); 
    } 
    } 

在這裏,我的錯誤信息:

05-07 12:58:47.920: E/AndroidRuntime(31053): FATAL EXCEPTION: AsyncTask #5 
05-07 12:58:47.920: E/AndroidRuntime(31053): java.lang.RuntimeException: An error occured while executing doInBackground() 
05-07 12:58:47.920: E/AndroidRuntime(31053): at android.os.AsyncTask$3.done(AsyncTask.java:278) 
05-07 12:58:47.920: E/AndroidRuntime(31053): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
05-07 12:58:47.920: E/AndroidRuntime(31053): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
05-07 12:58:47.920: E/AndroidRuntime(31053): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
05-07 12:58:47.920: E/AndroidRuntime(31053): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
05-07 12:58:47.920: E/AndroidRuntime(31053): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
05-07 12:58:47.920: E/AndroidRuntime(31053): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
05-07 12:58:47.920: E/AndroidRuntime(31053): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
05-07 12:58:47.920: E/AndroidRuntime(31053): at java.lang.Thread.run(Thread.java:856) 
05-07 12:58:47.920: E/AndroidRuntime(31053): Caused by: java.lang.NullPointerException 
05-07 12:58:47.920: E/AndroidRuntime(31053): at org.ksoap2.transport.ServiceConnectionSE.getResponseProperties(ServiceConnectionSE.java:85) 
05-07 12:58:47.920: E/AndroidRuntime(31053): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:167) 
05-07 12:58:47.920: E/AndroidRuntime(31053): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:96) 
05-07 12:58:47.920: E/AndroidRuntime(31053): at host.framework.ServicePromemoria$CheckUpdateTask.doInBackground(ServicePromemoria.java:430) 
05-07 12:58:47.920: E/AndroidRuntime(31053): at host.framework.ServicePromemoria$CheckUpdateTask.doInBackground(ServicePromemoria.java:1) 
05-07 12:58:47.920: E/AndroidRuntime(31053): at android.os.AsyncTask$2.call(AsyncTask.java:264) 
05-07 12:58:47.920: E/AndroidRuntime(31053): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
05-07 12:58:47.920: E/AndroidRuntime(31053): ... 5 more 

我不確定問題與連接泄漏有關。

回答

1

檢查您的變量沒有設置爲空。如果沒有,問題是http調用只是處理異常。

try { 
    androidHttpTransport.call(soap_action, envelope); //line 430, where error occurs! 
} catch (IOException e) { 
    e.printStackTrace(); 
} catch (XmlPullParserException e) { 
    e.printStackTrace(); 
} catch (Exception e) { 
    enter code here 
} 

希望它有幫助!

+0

謝謝@Aebsubis我正是使用了這個解決方法! :) – GVillani82 2013-05-07 14:08:34

相關問題