Android 中利用 ksoap2 调用 WebService的示例代码

当我们需要在Android应用中调用网络服务时,可以通过使用Web Service来实现。在Android中使用ksoap2库可以简单地实现Web Service调用。下面是使用ksoap2库在Android中调用WebService的步骤示例。

步骤一:导入ksoap2库文件

将ksoap2的jar文件拷贝到Android项目的libs目录下,并在build.gradle中添加以下代码

dependencies {
    implementation files('libs/ksoap2-android-assembly-3.6.2-jar-with-dependencies.jar')
}

步骤二:创建android异步任务

由于网络请求是不允许在主线程中进行的,所以我们需要创建Android异步任务来处理。

private class MyAsyncTask extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
            String result = "";
            String url = "http://webServiceUrl";//Web Service请求URL
            String namespace = "http://webServiceNamespace";//Web Service的命名空间
            String methodName = "webServiceMethodName";//Web Service的方法名

            try{
                SoapObject soapObject = new SoapObject(namespace, methodName);//创建SoapObject对象
                soapObject.addProperty("arg1", "paramValue1");//添加参数
                soapObject.addProperty("arg2", "paramValue2");
                SoapSerializationEnvelope soapSerializationEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);//创建SoapSerializationEnvelope对象
                soapSerializationEnvelope.bodyOut = soapObject;//设置参数
                soapSerializationEnvelope.dotNet = true;
                HttpTransportSE httpTransportSE = new HttpTransportSE(url);//创建HttpTransportSE对象
                httpTransportSE.debug = true;
                try{
                    httpTransportSE.call(null, soapSerializationEnvelope);//调用Web Service方法
                    if (soapSerializationEnvelope.getResponse() != null){
                        result = soapSerializationEnvelope.getResponse().toString();//获取返回结果
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            }catch (Exception e){
                e.printStackTrace();
            }

            return result;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            //处理请求结果
        }
    }

步骤三:执行异步任务

执行异步任务的方式很简单,只需要调用MyAsyncTask的execute方法即可:

new MyAsyncTask().execute();

示例1:调用返回结构体的Web Service方法

要调用返回结构体的Web Service方法,需要创建一个SoapObject来存储传递的参数。

private void callWebService(){
    AsyncTask<String, Void, String> task = new AsyncTask<String, Void, String>() {
        @Override
        protected String doInBackground(String... params) {
            String url = "http://www.webservicex.net/globalweather.asmx?WSDL";
            String namespace="http://www.webserviceX.NET";
            String methodName="GetCitiesByCountry";
            String soapAction="http://www.webserviceX.NET/GetCitiesByCountry";

            String result = "";
            try{
                SoapObject soapObject = new SoapObject(namespace, methodName);

                soapObject.addProperty("CountryName", "China");

                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                envelope.bodyOut = soapObject;
                envelope.dotNet = true;

                HttpTransportSE httpTransportSE = new HttpTransportSE(url);
                httpTransportSE.call(soapAction, envelope);
                Object object = envelope.getResponse();

                if (object != null) {
                    result = object.toString();
                }

            }catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }

        @Override
        protected void onPostExecute(String result) {
            Log.d(TAG, "Result:"+result);
            //处理请求结果
        }
    };
    task.execute();
}

示例2:调用返回数组结构体的Web Service方法

要调用返回数组结构体的Web Service方法,需要创建一个SoapObject来存储传递的参数。

private void callWebService2(){
    AsyncTask<String, Void, String> task = new AsyncTask<String, Void, String>() {
        @Override
        protected String doInBackground(String... params) {
            String url = "http://www.wsdemo.com/WeatherWebService.asmx?WSDL";
            String namespace="http://www.WSDemo.com";
            String methodName="getWeatherInfoByCity";
            String soapAction="http://www.WSDemo.com/getWeatherInfoByCity";

            String result = "";
            try{
                SoapObject soapObject = new SoapObject(namespace, methodName);

                soapObject.addProperty("theCityName", "上海");

                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                envelope.bodyOut = soapObject;
                envelope.dotNet = true;

                HttpTransportSE httpTransportSE = new HttpTransportSE(url);
                httpTransportSE.call(soapAction, envelope);
                Vector vector = (Vector)envelope.getResponse();

                if (vector != null && vector.size()>0) {
                    for(int i = 0; i < vector.size(); i++){
                        Object object = vector.get(i);
                        if (object instanceof SoapObject){
                            SoapObject soapObject1 = (SoapObject)object;
                            //处理返回的数据
                        }
                    }
                }
            }catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }

        @Override
        protected void onPostExecute(String result) {
            Log.d(TAG, "Result:"+result);
            //处理请求结果
        }
    };
    task.execute();
}

以上就是在Android中利用ksoap2调用WebService的示例代码详细攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android 中利用 ksoap2 调用 WebService的示例代码 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • spring boot 2.x静态资源会被拦截器拦截的原因分析及解决

    一、问题描述 在使用Spring Boot 2.x开发项目时,我们可能会遇到一个问题,即静态资源(如CSS、JS、图片等)会被拦截器拦截而无法正常加载导致页面样式、交互等异常。这是因为Spring Boot 2.x采用了不同于之前版本的WebMvcConfigurerAdapter配置方式,在配置拦截器时需要特别注意。 二、原因分析 在Spring Boot…

    Java 2023年5月20日
    00
  • JavaWeb实战之用Servlet+JDBC实现用户登录与注册

    下面是此攻略的详细讲解。 1. 背景 JavaWeb是一种在Web应用程序开发领域广泛使用的技术,可以帮助Web开发人员构建高效,可靠,安全的Web应用程序。其中,Servlet和JDBC是JavaWeb开发的两个核心组件。通过使用Servlet和JDBC,我们可以实现许多常见的Web应用程序,例如用户登录和注册,数据管理,用户反馈等功能。 此文我们将来讲解…

    Java 2023年5月20日
    00
  • Spring Data Jpa 中原生查询 REGEXP 的使用详解

    Spring Data JPA 中原生查询 REGEXP 的使用详解 在使用 Spring Data JPA 进行数据持久化时,有时需要使用原生 SQL 进行查询,而在查询过程中常常需要使用正则表达式来匹配数据。Spring Data JPA 提供了对正则表达式的支持,本文将详细讲解如何在 Spring Data JPA 中使用原生查询 REGEXP。 正则…

    Java 2023年5月20日
    00
  • 关于maven环境的安装及maven集成idea环境的问题

    下面是关于maven环境的安装及maven集成idea环境的问题的完整攻略。 1. Maven环境的安装 1.1 下载Maven 首先,需要从Maven官网上下载最新版的Maven。可以访问以下网址: https://maven.apache.org/download.cgi 选择最新版本的二进制zip文件,下载后解压缩到本地。 1.2 配置环境变量 在Ma…

    Java 2023年5月20日
    00
  • 浅谈对象与Map相互转化

    关于“浅谈对象与Map相互转化”的攻略,我将分为以下三个部分进行讲解: 对象转Map Map转对象 示例说明 对象转Map 在JavaScript中,我们可以使用Object.entries()方法快速地将一个对象转化为Map。 const obj = { name: "Tom", age: 18 }; const map = new M…

    Java 2023年5月26日
    00
  • spring boot+thymeleaf+bootstrap实现后台管理系统界面

    下面是关于“spring boot+thymeleaf+bootstrap实现后台管理系统界面”的攻略: 准备工作 首先,在开始实现后台管理系统界面之前,需要先进行一些准备工作。 环境配置 可以使用任意的IDE工具,例如Intellij IDEA、Eclipse等。此外,还需要确保以下环境已经配置好: JDK1.8及以上 Maven3及以上 MySQL5.6…

    Java 2023年5月19日
    00
  • java中int初始化可以为0,但不能为NULL问题

    在Java中,int类型的变量可以被初始化为0,但不能被初始化为NULL。这是因为在Java中,int是原始数据类型,而NULL是引用数据类型的特殊值,不适用于原始数据类型的变量。 如果我们试图初始化一个int变量为NULL,将会得到一个编译时错误: int a = NULL; // 编译报错 相反,我们可以将int变量初始化为0: int a = 0; 在…

    Java 2023年5月19日
    00
  • SpringBoot整合mybatis通用Mapper+自定义通用Mapper方法解析

    下面我将详细讲解“SpringBoot整合mybatis通用Mapper+自定义通用Mapper方法解析”的完整攻略。 一、什么是通用Mapper 通用Mapper是Mybatis官方提供的一个插件,它可以自动化生成Mybatis的基本CRUD方法,避免了开发人员重复编写大量类似的Sql代码的繁琐工作。这样能够大大提高开发效率,让我们把重点放在业务逻辑上。 …

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部