Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android平台調用Web Service:示例

Android平台調用Web Service:示例

編輯:關於Android編程

最近在學習Android,隨著移動設備的流行,當軟件走上商業化的道路,為了爭奪市場,肯定需要支持Android的,所以開始接觸了Android,不過只了解皮毛就好,因為我們要做管理者嘛,懂點Android,管理起來容易些。

Android學起來也簡單,封裝的更好了,一個個的控件,像是又回到了VB的趕腳。

下面將通過一個示例講解如何在Android平台調用Web Service。我們使用互聯網現成的Webservice,供查詢手機號碼歸屬地的Web service,它的WSDL為http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl。

1)新建Android工程,引入上面下載的ksoap2-android類庫

在Android平台調用WebService需要依賴於第三方類庫ksoap2,它是一個SOAP Webservice客戶端開發包,主要用於資源受限制的Java環境如Applets或J2ME應用程序(CLDC/ CDC/MIDP)。

而在Android平台中我們並不會直接使用ksoap2,而是使用ksoap2android。KSoap2 Android 是Android平台上一個高效、輕量級的SOAP開發包

2)編寫布局文件res/layout/main.xml

  
  
      
      
    


3)編寫MainActivity類

/** 
 * Android平台調用WebService(手機號碼歸屬地查詢) 
 *  
 */  
public class MainActivity extends Activity {  
    private EditText phoneSecEditText;  
    private TextView resultView;  
    private Button queryButton;  
  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
 
 // 強制在UI線程中操作
           StrictMode.setThreadPolicy(newStrictMode.ThreadPolicy.Builder()
       .detectDiskReads().detectDiskWrites().detectNetwork()
        .penaltyLog().build());
           
        StrictMode.setVmPolicy(newStrictMode.VmPolicy.Builder()
       .detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath()
        .build());
 
        phoneSecEditText = (EditText) findViewById(R.id.phone_sec);  
        resultView = (TextView) findViewById(R.id.result_text);  
        queryButton = (Button) findViewById(R.id.query_btn);  
  
        queryButton.setOnClickListener(new OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                // 手機號碼(段)  
                String phoneSec = phoneSecEditText.getText().toString().trim();  
                // 簡單判斷用戶輸入的手機號碼(段)是否合法  
                if ("".equals(phoneSec) || phoneSec.length() < 7) {  
                    // 給出錯誤提示  
                    phoneSecEditText.setError("您輸入的手機號碼(段)有誤!");  
                    phoneSecEditText.requestFocus();  
                    // 將顯示查詢結果的TextView清空  
                    resultView.setText("");  
                    return;  
                }  
                // 查詢手機號碼(段)信息  
                getRemoteInfo(phoneSec);  
            }  
        });  
    }  
  
    /** 
     * 手機號段歸屬地查詢 
     *  
     * @param phoneSec 手機號段 
     */  
    public void getRemoteInfo(String phoneSec) {  
        // 命名空間  
        String nameSpace = "http://WebXml.com.cn/";  
        // 調用的方法名稱  
        String methodName = "getMobileCodeInfo";  
        // EndPoint  
        String endPoint = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx";  
        // SOAP Action  
        String soapAction = "http://WebXml.com.cn/getMobileCodeInfo";  
  
        // 指定WebService的命名空間和調用的方法名  
        SoapObject rpc = new SoapObject(nameSpace, methodName);  
  
        // 設置需調用WebService接口需要傳入的兩個參數mobileCode、userId  
        rpc.addProperty("mobileCode", phoneSec);  
        rpc.addProperty("userId", "");  
  
        // 生成調用WebService方法的SOAP請求信息,並指定SOAP的版本  
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);  
  
        envelope.bodyOut = rpc;  
        // 設置是否調用的是dotNet開發的WebService  
        envelope.dotNet = true;  
        // 等價於envelope.bodyOut = rpc;  
        envelope.setOutputSoapObject(rpc);  
  
        HttpTransportSE transport = new HttpTransportSE(endPoint);  
        try {  
            // 調用WebService  
            transport.call(soapAction, envelope);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
  
        // 獲取返回的數據  
        SoapObject object = (SoapObject) envelope.bodyIn;  
        // 獲取返回的結果  
        String result = object.getProperty(0).toString();  
  
        // 將WebService返回的結果顯示在TextView中  
        resultView.setText(result);  
    }  
}  


注意點1nameSpace、methodName 、EndPoint和SOAP Action 信息,都可以在WSDL中得到。

注意點2調用WebService接口方法需要傳入的參數時,參數名稱要和WSDL中描述的一致。(網上有些資料說在需要傳入多個參數時,只要多個參數的順序與WSDL中參數出現的順序一致即可,名稱並不需要和WSDL中的一致,但實際測試發現,大多數情況下並不可行!

注意點3 本例中調用WebService後返回的結果如下所示:

1398547:貴州貴陽貴州移動黔中游卡

這裡明明返回的是xml格式的內容,為什麼我們不需要通過解析xml來獲取我們需要的內容呢?其實:

//獲取返回的數據

SoapObject object = (SoapObject) envelope.bodyIn;

ksoap2能夠將返回的xml轉換成SoapObject對象,然後我們就可以通過操作對象的方式來獲取需要的數據了。

注意點4本例中只返回了一個值,但有些WebService會返回多個值該怎麼獲取?獲取方法與本例完全一樣,只是需要注意的是如果是返回多個值,通過第100代碼object.getProperty(0);得到的可能仍然是一個SoapObject。不斷地調用getProperty()方法;總能得到你想要的全部結果。

4)在AndroidManifest.xml中配置添加訪問網絡的權限

  
  
      
          
              
                  
                  
              
          
      
 
      
 
      
       
  

5)運行結果

[i糙铻…?/ym/源碼下載

http://download.csdn.net/detail/tcl_6666/7365311

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved