Android平臺呼叫WebService詳解

小二陽發表於2017-12-14

webservice.jpg

我們並不討論如何去搭建一個WebService,我們僅僅知道如何去獲取WebService提供的服務, 然後解析返回的XML資料,然後把相關資料顯示到我們的Android裝置上就好!

首先如果想在Android平臺上呼叫WebService需要依賴於第三方類庫:ksoap2 而在Android平臺上,使用的是ksoap2 Android,一個高效,輕量級的SOAP開發包! 這個連結永久有效,裡面有兩個版本的Jar包,我用的是老一點版本的,沒有任何問題,完全可以用。新的版本大家可以去自己用一下,應該問題不大。 連結:https://pan.baidu.com/s/1kUPrui7 密碼:lajx

這裡我用的是Android Studio,直接上程式碼吧

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setXTContentView(R.layout.login_forreject);
        init();
    }
 //定義一個Handler用來更新頁面:
    private Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 0x001:
//                    txt_result.setText("結果顯示:\n" + result);
                    Toast.makeText(LoginForRejectActivity.this, "獲取天氣資訊成功", Toast.LENGTH_SHORT).show();
                    break;
                case 0x002:
//                    txt_result.setText("結果顯示:\n" + result);
                    Toast.makeText(LoginForRejectActivity.this, "號碼歸屬地查詢成功", Toast.LENGTH_SHORT).show();
                    break;
                default:
                    break;
            }

        }
    };
    private void init() {     
     // 開啟一個子執行緒,進行網路操作,等待有返回結果,使用handler通知UI
        new Thread(networkTask).start();
}

   /**
     * 網路操作相關的子執行緒
     */
    Runnable networkTask = new Runnable() {

        @Override
        public void run() {
            // TODO
            // 在這裡進行 http request.網路請求相關操作
            getRejectInfo();
        }
    };
    private void getRejectInfo() {
        // 名稱空間
        String nameSpace = "http://tempuri.org/";
        // 呼叫的方法名稱
        String methodName = "Test";
        // EndPoint
        String endPoint = "http://192.168.1.164:8080/RejectWebService.asmx";
        // SOAP Action
        String soapAction = "http://tempuri.org/Test";

        // 指定WebService的名稱空間和呼叫的方法名
        SoapObject rpc = new SoapObject(nameSpace, methodName);

        // 設定需呼叫WebService介面需要傳入的三個引數devicedCode、carCode、typed
        rpc.addProperty("devicedCode", "dff233423238709092");//裝置編碼
        rpc.addProperty("carCode", "2312kjj234kjdf");//條碼
        rpc.addProperty("typed", 0);// 箱碼是1,瓶碼是0

        // 生成呼叫WebService方法的SOAP請求資訊,並指定SOAP的版本
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

        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);//ver11,第一個引數不能為空
//            transport.call(null, envelope);//envolopeVersion為ver12第一個引數可以為空,必須介面支援ver12才行
            // 獲取返回的資料
            SoapObject response = (SoapObject) envelope.bodyIn;
            Log.e(TAG, "getRejectInfo: object========"+ response);
            //response的處理需要根據返回的具體情況,基本都要進行下面一步
            SoapObject o = (SoapObject) response.getProperty(0);
            Log.e(TAG, "getRejectInfo: o==========" + o);
            handler.sendEmptyMessage(0x001);
            // 獲取返回的結果
//        String result = object.getProperty(0).toString();
//        Log.e(TAG, "getRejectInfo: result=============="+ result );
            // 將WebService返回的結果顯示在TextView中
//        resultView.setText(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
複製程式碼

"http://192.168.1.164:8080/RejectWebService.asmx" 後臺會給你,你可以在後面加“ ?wsdl ”,我的是這樣的: http://192.168.1.164:8080/RejectWebService.asmx?wsdl 然後在瀏覽器中開啟就可以得到如下圖片所示:

image.png

image.png

1:表示的是呼叫的方法名稱 methodName 2:表示的是soapAction 3:表示的是名稱空間nameSpace

另外,別忘了導包和Internet的許可權! 是不是很簡單,小夥伴們!

在所有的道別裡,我還是最喜歡明天見。承蒙你出現,夠我喜歡好多年 ​​​。

相關文章