PHP字串長度找子字串與取代字串的常用函數

PHP在字串的操作上,有非常多的相關函數可以使用,我們在這裡只介紹經常會使用到的字串操作函數。像是如何取得字串的長度、在某一個字裏面尋找子字串首次出現的位置、以及字串的取代函數...等等。這些都是在編寫程式的時候,頻繁被程式設計師使用到的基礎函數。 取得字串長度 <?...

顯示具有 Android學習指南 標籤的文章。 顯示所有文章
顯示具有 Android學習指南 標籤的文章。 顯示所有文章

2014年9月5日 星期五

如何實作Android Webservice Client呢?

前言

何謂ksaop2-android計劃呢?它是一個由Third party所開發的一個輕量級的SOAP(Simple Object Access Protocol;簡單物件存取協定) Webservice的公用函式庫,非常適合應用在Android作業系統與外部跨系統間的資料交換。在開始介紹之前,我們先來談一談SOAP是一種使用於互連網上、以XML為訊息交換格式,在跨不同系統之間的資料交換的規範協定。下面我們主要讓各位了解Android平台要如何呼叫外部的Webservice服務。

Ksoap Client操作介面

在這個小節中,將分成用戶介面(UI)顯示和佈置UI元件的XML設定檔兩個部份來探討:
1.用戶介面(UI)顯示,故名思義指的是使用者在Android行動裝置上所呈現的畫面,如圖1所示。
ksaop_ws
圖1. 以ksoap呼叫外部webservice的操作畫面

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();
  }  
 }    

}


結語

經過以上簡單的小程式範例介紹之後,相信各位都可以在android平台上設計一個可以向外部伺服務(Server)請求數據服務的功能。