2014-02-20 65 views
2

從Android客戶端讀取.NET Web服務的響應時出現問題。 響應結構(例如):在Android中讀取.NET Web Service響應

<xml> 
    <resaRef>400</resaRef> 
    <firstname>Amine</name> 
    <lastname>Touahria</lastname> 
</xml> 

這裏是我的代碼:

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

     import android.app.Activity; 
     import android.os.AsyncTask; 
     import android.os.Bundle; 
     import android.view.View; 
     import android.view.View.OnClickListener; 
     import android.widget.Button; 
     import android.widget.EditText; 

     public class MainActivity extends Activity { 
      EditText ref; 
      Button call; 
      public final String NAMESPACE = "http://tempuri.org/"; 
      public final String URL = "http://192.168.0.100/hngwebsetup/HNGWeb.asmx"; 
      public final String SOAP_ACTION = "http://tempuri.org/GetResa"; 
      public final String METHOD_NAME = "GetResa"; 
      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main); 
       ref=(EditText)findViewById(R.id.ref_res); 


       call=(Button)findViewById(R.id.call_ws); 
       call.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         AsyncCallWS task = new AsyncCallWS(); 
         task.execute(); 

        } 
       }); 

      } 
      public class AsyncCallWS extends AsyncTask<String, String,String>{ 

       protected String doInBackground(String... params) { 

        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
        PropertyInfo pi =new PropertyInfo(); 
        pi.setName("resaRef"); 
        pi.setValue("400"); 
        pi.setType(String.class); 
        request.addProperty(pi); 

        /*PropertyInfo pi =new PropertyInfo(); 
        pi.setName("date"); 
        pi.setValue("20130601"); 
        pi.setType(String.class); 
        request.addProperty(pi);*/ 


        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 

        envelope.dotNet = true; 
        envelope.setOutputSoapObject(request); 
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 

        try{ 
         androidHttpTransport.call(SOAP_ACTION, envelope); 
         final SoapObject response = (SoapObject)envelope.getResponse(); 
         runOnUiThread(new Runnable() { 

          @Override 
          public void run() { 
           ref.setText(response.getProperty("nom").toString()); 


          } 
         }); 


        } 

        catch(Exception e){ 
        e.printStackTrace(); 

        } 


        return null; 
       } 



      } 
     } 

我有這樣的例外:

02-20 04:02:59.837: E/AndroidRuntime(1077): FATAL EXCEPTION: AsyncTask #1 
02-20 04:02:59.837: E/AndroidRuntime(1077): Process: com.hotix.webser, PID: 1077 
02-20 04:02:59.837: E/AndroidRuntime(1077): java.lang.RuntimeException: An error occured while executing doInBackground() 
02-20 04:02:59.837: E/AndroidRuntime(1077):  at android.os.AsyncTask$3.done(AsyncTask.java:300) 
02-20 04:02:59.837: E/AndroidRuntime(1077):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
02-20 04:02:59.837: E/AndroidRuntime(1077):  at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
02-20 04:02:59.837: E/AndroidRuntime(1077):  at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
02-20 04:02:59.837: E/AndroidRuntime(1077):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
02-20 04:02:59.837: E/AndroidRuntime(1077):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
02-20 04:02:59.837: E/AndroidRuntime(1077):  at java.lang.Thread.run(Thread.java:841) 
02-20 04:02:59.837: E/AndroidRuntime(1077): Caused by: java.lang.NoClassDefFoundError: org.ksoap2.serialization.SoapObject 
02-20 04:02:59.837: E/AndroidRuntime(1077):  at com.hotix.webser.MainActivity$AsyncCallWS.doInBackground(MainActivity.java:48) 
02-20 04:02:59.837: E/AndroidRuntime(1077):  at com.hotix.webser.MainActivity$AsyncCallWS.doInBackground(MainActivity.java:1) 
02-20 04:02:59.837: E/AndroidRuntime(1077):  at android.os.AsyncTask$2.call(AsyncTask.java:288) 
02-20 04:02:59.837: E/AndroidRuntime(1077):  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
02-20 04:02:59.837: E/AndroidRuntime(1077):  ... 3 more 

什麼問題?

回答

0

解決:
我只是顯示一個SoapObject然後

SoapObject obj=new SoapObject(); 
obj=(SoapObject) response.getProperty(0); 

ref.setText(obj.getPrimitiveProperty("Nom").toString()+obj.getPrimitiveProperty("DateDepart").toString()); 
0

我認爲這是關係到添加正確的庫在Eclipse的正確方法。這很可能會修復它:

  1. 檢查您使用哪個JAR進行SOAP。
  2. 轉到您的項目 - >屬性 - > Java構建路徑
  3. 在標籤庫 - 確保你已經添加了JAR,你可以看到它。
  4. 的標籤順序和導出 - 檢查Android的私人圖書館和Android依賴的盒子(也許也是JAR的框)

附:如果仍然沒有工作嘗試以下方法:

  • 重新啓動Eclipse和清理項目(項目>清潔)

  • 變化「排序和導出」項目的順序。在你做對了之前可能需要幾次嘗試。下一個應該工作(你在你的名單有可能是當然的不同):

    1. SRC
    2. 谷歌的API
    3. Android的私家藏書
    4. 任何庫項目你有
    5. Android的依賴
    6. JAR文件
+0

由於在EditText響應值之前創建的,我試過HelloWold至極返回一個字符串和它的作品,但是當我改變GetResa我有一個例外。 –

+0

java.lang.ClassCastException:org.ksoap2.serialization.SoapObject無法轉換爲org.ksoap2.serialization.SoapPrimitive com.hotix.webser.MainActivity $ AsyncCallWS.doInBackground(MainActivity.java:69) at com.hotix.webser .MainActivity $ AsyncCallWS.doInBackground(MainActivity.java:1) at android.os.AsyncTask $ 2.call(AsyncTask.java:288) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ThreadPoolExecutor.runWorker(的ThreadPoolExecutor。Java的:1112)java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:587) 在java.lang.Thread.run(Thread.java:841) –

+0

在該行的代碼,該異常發生的呢?你能粘貼這條線嗎? – Stan