Android studio 下 soap的實現(調用天氣接口)

首先附上我在實現過程中參考的兩篇十分有用的文檔:
1.https://www.cnblogs.com/zhangdongzi/archive/2011/04/19/2020688.html
2.https://trinitytuts.com/load-data-from-soap-web-service-in-android-application/
工具準備:
OPPO k3 Android (9.0)手機,http://www.webxml.com.cn 天氣測試網站, Android studio 3.2開發環境
實現步驟:

  1. 建立Android工程 增加輸入,顯示框和按鈕
  2. 下載:ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar 包
  3. 把第二步下載的包拷貝到工程目錄app/libs 下
  4. 在Android studio 添加包到工程
  5. 編寫代碼調用公開的網絡天氣接口驗證工程代碼。

具體實現:
1. 建立工程,輸入,顯示框和按鈕 滿足測試需要如圖:
在這裏插入圖片描述
2.下載soap包 https://download.csdn.net/download/zz_mm/3946373 (要積分,我也找人要的)
3.複製到相應目錄如圖:
在這裏插入圖片描述
4.以添加第三方模塊的方式添加到工程如圖:
在這裏插入圖片描述

5.完成天氣網站可支持省份接口的調用:如圖
在這裏插入圖片描述
調用成功!
下面是簡單的測試代碼,如果你沒有做過soap的話有的難度,但是隻要遵循固定的調用順序基本沒有問題,在調試過程中遇到很多問題,不要慌,多搜基本都能解決,實在解決不了,歇一會兒明天在看就不一樣了。

package com.example.superman.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

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 org.ksoap2.transport.AndroidHttpTransport;




public class MainActivity extends AppCompatActivity {

    String TAG = "Response";
    Button bt;
    EditText celcius;
    TextView txt;
    String getCel;
    SoapPrimitive resultString;

    //命名空間
    private static final String serviceNameSpace="http://WebXml.com.cn/";
    //調用方法(獲得支持的城市)
    private static final String getSupportCity="getSupportCity";
    String  xx="";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        bt = (Button) findViewById(R.id.bt);
        celcius = (EditText) findViewById(R.id.cel);
        txt = (TextView) findViewById(R.id.txt);


        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                getCel = celcius.getText().toString();
                AsyncCallWS task = new AsyncCallWS();
                task.execute();
                txt.setText(xx);
               //calculate();
            }
        });
    }

    private class AsyncCallWS extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            Log.i(TAG, "onPreExecute");
        }

        @Override
        protected Void doInBackground(Void... params) {
            Log.i(TAG, "doInBackground");
            calculate();
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            Log.i(TAG, "onPostExecute");
        }

    }

    public void calculate() {
        String SOAP_ACTION = "http://www.webxml.com.cn/getSupportProvince";
        String serviceURL="http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl";
        String getSupportCity="getSupportCity";
        String getSupportProvince="getSupportProvince";

        try {
            SoapObject soapObject = new SoapObject(serviceNameSpace, getSupportProvince);
            SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            soapEnvelope.dotNet = true;
            soapEnvelope.setOutputSoapObject(soapObject);

            HttpTransportSE transport = new HttpTransportSE(serviceURL);
            transport.debug=true;
            transport.call(serviceNameSpace+getSupportProvince, soapEnvelope);
            SoapObject result = (SoapObject) soapEnvelope.getResponse();
			Log.i(TAG, "Result Celsius: " + result);
			xx = result.toString();
        } catch (Exception ex) {
            Log.e(TAG, "Error: " + ex.getMessage());
        }
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章