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


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