這裡建立一個Class,名稱為 "CallSoap"。

Web Services提供的函數,相關的命名空間、網址、函數名稱,請參考這篇:

[ASP.NET應用] c# web services (HelloWorld 範例)

 

要先download soap  jar ,並且加到 lib 裡,這裡的範例是用:

ksoap2-android-assembly-2.4-jar-with-dependencies.jar

 

類的程式碼:

package com.example.tt_sample;

import org.ksoap2.SoapEnvelope;

import org.ksoap2.serialization.SoapObject;

import org.ksoap2.serialization.SoapPrimitive;

import org.ksoap2.serialization.SoapSerializationEnvelope;

import org.ksoap2.transport.HttpTransportSE;

 

public class CallSoap {    

     private static final String SOAP_ACTION1 = "http://tempuri.org/HelloWorld"//Web Services命名空間+函數名稱

     private static final String HelloWorldmethod = "HelloWorld"; //要呼叫的函數名稱

     private static final String NAMESPACE = "http://tempuri.org/"//Web Services命名空間

     private static final String URL = "http://xxxxx/ttnsservice.asmx"//Web Services的網址

 

     public CallSoap()

     {

     }   

    

     public String CallHellow()

     {

         String Get_HelloWorld="";

         try{

             // add paramaters and values

             SoapObject request1 = new SoapObject(NAMESPACE, HelloWorldmethod);

             SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

             envelope.dotNet = true;

             envelope.setOutputSoapObject(request1);

            

             //Web method call

             HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

             androidHttpTransport.debug = true;

 

             androidHttpTransport.call(SOAP_ACTION1, envelope);

 

             //get the response

             SoapPrimitive result= (SoapPrimitive)envelope.getResponse();

 

             String results = result.toString();

             Get_HelloWorld=results;

         }catch (Exception e){

              Get_HelloWorld=e.getMessage(); //將錯誤訊息傳回

         }

         return Get_HelloWorld; //傳回字串

     }

}

 

程式碼:

呼叫網路的應用,在最上層的 AndroidManifest.xml 加入下例程式碼,才不會有"permission denied"的問題。

<uses-permission android:name="android.permission.INTERNET" />

 

CallSoap cs=new CallSoap();

String aa=cs.CallHellow(); //aa將會是Hello Word

 

在程式這裡的應用有個重點,4.0以上的android基於安全性的原則,

已經不提供執行緒直接執行網路上的應用,所以要寫一個執行緒來執行,

在android裡,是多工的,所以執行緒要分工,

執行緒又有分UI的執行緒,

所以先一個執行縮執行類,再另一個執行緒將結果輸出到UI介面上。

 

若顯示在UI上的程式沒有另一個執行緒,會出現如下的錯誤訊息:

Only the original thread that created a view hierarchy can touch its views.

arrow
arrow
    創作者介紹
    創作者 jcgogo 的頭像
    jcgogo

    jcgogo

    jcgogo 發表在 痞客邦 留言(0) 人氣()