前言
何謂ksaop2-android計劃呢?它是一個由Third party所開發的一個輕量級的SOAP(Simple Object Access Protocol;簡單物件存取協定) Webservice的公用函式庫,非常適合應用在Android作業系統與外部跨系統間的資料交換。在開始介紹之前,我們先來談一談SOAP是一種使用於互連網上、以XML為訊息交換格式,在跨不同系統之間的資料交換的規範協定。下面我們主要讓各位了解Android平台要如何呼叫外部的Webservice服務。Ksoap Client操作介面
在這個小節中,將分成用戶介面(UI)顯示和佈置UI元件的XML設定檔兩個部份來探討:1.用戶介面(UI)顯示,故名思義指的是使用者在Android行動裝置上所呈現的畫面,如圖1所示。
2.佈置UI元件的XML設定檔(activity_soap_test.xml),是指對映到操作畫面的的每個元素的描述UI元件的定義文件。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:id="@+id/et_inputname" android:layout_width="100dp" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/calculateBtn" android:layout_alignBottom="@+id/calculateBtn" android:layout_alignParentLeft="true" android:layout_toLeftOf="@+id/btn_callws" android:ems="10" > <requestFocus /> </EditText> <Button android:id="@+id/btn_callws" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:onClick="processData" android:text="呼叫Webservice" /> <TextView android:id="@+id/tv_showme" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/et_inputname" android:layout_below="@+id/btn_callws" android:layout_marginLeft="84dp" android:layout_marginTop="42dp" android:text="Show me!!" android:textAppearance="?android:attr/textAppearanceMedium" /> </RelativeLayout>
Ksoap Client商業邏輯
當使用者按下呼叫webservice的按鈕,會觸發執行呼叫外部webserivce的商業邏輯的程式碼(SoapTest.java),舉例來說,使用者只要於操作畫面輸入Kingdom,稍後按下呼叫webservice按鈕,伺服器立即回傳Hello, Kingdom!結果到使用者畫面上。
package test.android.protocol; 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 test.android.R; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.EditText; import android.widget.TextView; public class SoapTest extends Activity { private static final String NAMESPACE = "http://ws.yourcompany.com/"; //將your IP address取代為你的測試主機位址 private static String URL = "http://your IP address:8080/WSTest/WSGreetingsPort?WSDL"; private static final String METHOD_NAME = "hello"; private static final String SOAP_ACTION = "http://ws.yourcompany.com/hello"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_soap_test); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.soap_test, menu); return true; } /** * 處理呼叫遠端webservice的商業邏輯 * @param view */ public void processData(View view) { EditText inputNameET = (EditText) findViewById(R.id.et_inputname); String inputName = inputNameET.getText().toString(); SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); request.addProperty("arg0", inputName); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.setOutputSoapObject(request); HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); try { androidHttpTransport.call(SOAP_ACTION, envelope); SoapPrimitive resultsRequestSOAP = (SoapPrimitive) envelope.getResponse(); TextView showMeTV = (TextView) findViewById(R.id.tv_showme); showMeTV.setText(resultsRequestSOAP.toString()); } catch (Exception e) { e.printStackTrace(); } } }
您好 請問一下webservice那一端要怎麼寫呢?
回覆刪除