Soap

package com.nenglong.wsclient;

import java.io.IOException;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.StrictMode;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

/**
 * @author huanglong Android 平臺調用WebService(手機號碼歸屬地查詢)
 */
public class MainActivity extends Activity {
    private TextView tv_result;
    private EditText et_phone;
    private Button btn_query;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        tv_result = (TextView) findViewById(R.id.result_text);
        et_phone = (EditText) findViewById(R.id.et);
        btn_query = (Button) findViewById(R.id.btn_query);
        btn_query.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String phone = et_phone.getText().toString().trim();
                if ("".equals(phone) || phone.length() < 7) {
                    et_phone.setText("您輸入的手機號碼有誤");
                    et_phone.requestFocus();
                    tv_result.setText("");
                    return;
                }
                getRemoteInfo(phone);
            }
        });
    }

    /**
     * 查詢號碼段歸屬地的方法
     * 
     * @param phone
     *            手機號碼段
     */
    public void getRemoteInfo(final String phone) {
        new Thread(new Runnable() {
            
            @Override
            public void run() {
                // TODO Auto-generated method stub
                // 命名空間
                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 soapObject = new SoapObject(nameSpace, methodName);
                // 設置須要調用WebService接口的兩個參數mobileCode UserId
                soapObject.addProperty("mobileCode", phone);
                soapObject.addProperty("userId", "");
                // 生成調用WebService方法調用的soap信息,而且指定Soap版本
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                        SoapEnvelope.VER10);
                envelope.bodyOut = soapObject;
                // 是否調用DotNet開發的WebService
                envelope.dotNet = true;//這裏若是設置爲TRUE,那麼在服務器端將獲取不到參數值(如:將這些數據插入到數據庫中的話)
                envelope.setOutputSoapObject(soapObject);
                HttpTransportSE transport = new HttpTransportSE(endPoint);
                try {
             transport.call(soapAction, envelope); }
catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 獲取返回的數據 SoapObject object = (SoapObject) envelope.bodyIn; // 獲取返回的結果 String result = object.getProperty(0).toString(); Message message = handler.obtainMessage(); message.obj = result; handler.sendMessage(message); } }).start(); } private Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { // 將WebService獲得的結果返回給TextView tv_result.setText(msg.obj.toString()); }; }; }

 

webService:基於SOAP協議的遠程調用標準,經過webService能夠將不用的操做系統平臺,不一樣的計算機語言,不一樣的技術整合到一塊兒。java

 

        調用webService須要導入jar包:ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar包,這個包在網上能夠下載,至於導入的方法 ,右鍵項目,選擇最後一項properties-->Java build path-->Libraies-->Add external Jars   選擇相應的路徑下的jar文件就OK了,而後記得在Order and Export 裏面將選擇的jar文件勾選上。android

      調用webService的步驟分爲7個:web

1. 實例化soapObject對象,指定Soap的命名空間(從相關文檔中能夠查看WSDL命名空間以及調用方法)數據庫

 

[java]  view plain copy print ?
 
  1. View Code   
  2.   
  3. //命名空間  
  4.     private static final String serviceNameSpace="http://WebXml.com.cn/";  
  5.     //調用方法(得到支持的城市)  
  6.     private static final String getSupportCity="getSupportCity";  
  7.   
  8. //實例化SoapObject對象  
  9.         SoapObject request=new SoapObject(serviceNameSpace, getSupportCity);  


2.假設方法有參數的話,添加調用的方法的參數服務器

 

request.addProperties("參數名稱","參數值");app

要注意的是,addProperty方法的第1個參數雖然表示調用方法的參數名,但該參數值並不必定與服務端的WebService類中的方法參數名一致,只要設置參數的順序一致便可。ide

 

3.設置SOAP請求信息(參數部分爲SOAP版本號,與本身要調用的SOAP版本必須一致,也就是你導入到工程中的jar相對應的版本)oop

 

[java]  view plain copy print ?
 
  1. //得到序列化的Envelope  
  2.         SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);  
  3.         envelope.bodyOut=request;  //肯定發送對象

4.註冊Enelopeui

 

(new  MarshalBase64()).register(envelope);spa

5.構建傳輸對象,並指定WDSL文檔中的URL

 

[java]  view plain copy print ?
 
  1. //請求URL  
  2.     private static final String serviceURL="http://www.webxml.com.cn/webservices/weatherwebservice.asmx";  
  3. //Android傳輸對象  
  4.         AndroidHttpTransport transport=new AndroidHttpTransport(serviceURL);  
  5.         transport.debug=true;  


6.調用webService(其中參數爲1:命名空間+方法名稱,envelope對象);

 

 

[java]  view plain copy print ?
 
  1. transport.call(serviceNameSpace+getWeatherbyCityName, envelope);  
    //5.訪問WebService,第一個參數爲命名空間 + 方法名,第二個參數爲Envelope對象  


7.解析返回數據:

 

 

[java]  view plain copy print ?
 
    1. View Code   
    2.   
    3. if(envelope.getResponse()!=null){  
    4.                 return parse(envelope.bodyIn.toString());  
    5.             }  
    6.   
    7. /************** 
    8.      * 解析XML 
    9.      * @param str 
    10.      * @return 
    11.      */  
    12.     private static List<String> parse(String str){  
    13.         String temp;  
    14.         List<String> list=new ArrayList<String>();  
    15.         if(str!=null && str.length()>0){  
    16.             int start=str.indexOf("string");  
    17.             int end=str.lastIndexOf(";");  
    18.             temp=str.substring(start, end-3);  
    19.             String []test=temp.split(";");  
    20.               
    21.              for(int i=0;i<test.length;i++){  
    22.                  if(i==0){  
    23.                      temp=test[i].substring(7);  
    24.                  }else{  
    25.                      temp=test[i].substring(8);  
    26.                  }  
    27.                  int index=temp.indexOf(",");  
    28.                  list.add(temp.substring(0, index));  
    29.              }  
    30.         }  
    31.         return list;  
    32.     }  
相關文章
相關標籤/搜索