這裡建立一個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.
留言列表