2012-10-09 162 views
2

我想定期發送電池信息到我的server.I我已經測試了web服務代碼,它沒有使用Android服務工作正常,但拋出異常,當我試圖打電話在Service中可運行的webservice方法。在Android服務拋出異常運行的Webservice方法異常

雖然它的工作很好,當我試圖在我的Android服務中運行runnable時打印Toast。

package com.services; 

    import org.ksoap2.SoapEnvelope; 
    import org.ksoap2.serialization.SoapObject; 
    import org.ksoap2.serialization.SoapPrimitive; 
    import org.ksoap2.serialization.SoapSerializationEnvelope; 
    import org.ksoap2.transport.HttpTransportSE; 

    import android.app.Service; 
    import android.content.BroadcastReceiver; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.content.IntentFilter; 
    import android.os.Handler; 
    import android.os.IBinder; 
    import android.widget.Toast; 

    public class BackService extends Service { 
     private int m_interval = 20000; // 5 seconds by default, can be changed later 
     private Handler m_handler; 
     int Level; 

     private static final String SOAP_ACTION = "http://xy.xy/insertfeedback"; 
      private static final String METHOD_NAME = "insertfeedback"; 
      private static final String NAMESPACE = "http://xy.xy/"; 
      private static final String URL = "http://192.168.9.2:8080/WebApplication2/NewWebServiceService?WSDL"; 
      SoapObject request; 
      SoapSerializationEnvelope envelope; 
      HttpTransportSE ht; 

     @Override 
     public IBinder onBind(Intent intent) { 
      return null; 
     } 

     @Override 
     public void onCreate() { 

      Toast.makeText(getApplicationContext(), "Service Created", Toast.LENGTH_SHORT).show(); 
      request= new SoapObject(NAMESPACE, METHOD_NAME);  
      envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
      ht = new HttpTransportSE(URL); 
     } 

     @Override 
     public void onDestroy() { 
      //code to execute when the service is shutting down 
     } 

     @Override 
     public void onStart(Intent intent, int startid) { 
      registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 

     Toast.makeText(getApplicationContext(), "Service Stared", Toast.LENGTH_SHORT).show(); 
     m_handler = new Handler(); 
     m_statusChecker.run(); 
     } 

     Runnable m_statusChecker = new Runnable() 
     { 
      @Override 
      public void run() { 
       Toast.makeText(getApplicationContext(), ""+ Level, Toast.LENGTH_SHORT).show(); 
       BatteryService(); 
       //updateStatus(); //this function can change value of m_interval. 
       m_handler.postDelayed(m_statusChecker, m_interval); 
      } 
     }; 


     private final BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){ 
      @Override 
      public void onReceive(Context arg0, Intent intent) { 
      Level = intent.getIntExtra("level", 0); 
      //Toast.makeText(getApplicationContext(), ""+Level+"%", Toast.LENGTH_SHORT).show(); 

      } 
      }; 


      public void BatteryService() 
      { 

       request.addPropertyIfValue("value",50); 
       envelope.setOutputSoapObject(request); 


       try 
       { 
        ht.call(SOAP_ACTION, envelope); 
        final SoapPrimitive response = (SoapPrimitive)envelope.getResponse(); 
        final String str = response.toString(); 
        Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG).show(); 
       } 
       catch (Exception e) { 
        Toast.makeText(getApplicationContext(),"Exception", Toast.LENGTH_LONG).show(); 

       } 
      } 
    } 
+0

什麼是例外? – njzk2

回答

1

你遇到了什麼樣的例外?你也應該發佈日誌。這將有助於您瞭解您的問題

+0

我不知道它只是在趕上的例外。可能這條線是拋出異常。 ht.call(SOAP_ACTION,envelope); –

+0

如果你不知道這個異常,不要只是這樣捕​​捉它。嘗試記錄異常類型和異常消息。這將使實際問題更加深入。 – Budius

+0

它不在模擬器上工作,但它在平板電腦上工作。無論如何,謝謝。 –