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日

相关文章

  • 浅谈Java自定义注解相关知识

    浅谈Java自定义注解相关知识 什么是Java注解 Java注解(Annotation),是Java SE 5.0中新增的一个特性,也是Java语言中一个重要的元编程工具。注解是对程序代码进行一些特殊标记的一种形式化语言机制,用于在源代码中嵌入元数据信息,以及为编译器、虚拟机、运行期系统等软件提供提示和解释性信息,以达到代码分析、配置文件生成,甚至是程序编译…

    Java 2023年5月27日
    00
  • 详解JVM的内存对象介绍[创建和访问]

    详解JVM的内存对象介绍[创建和访问] 简介 JVM(Java Virtual Machine)是一个虚拟机,它是Java程序运行的环境。在JVM中,所有的变量、对象都是存储在内存中的。本文将介绍JVM中的内存对象创建和访问的过程和相关知识点。 JVM内存分区 JVM中的内存分为三个部分: 堆(Heap):用于存储对象以及数组等数据。堆是Java运行时的主要…

    Java 2023年5月26日
    00
  • Spring boot中PropertySource注解的使用方法详解

    让我对“Spring boot中PropertySource注解的使用方法详解”进行一个详细的介绍。 PropertySource注解的概念 在Spring Boot中,我们使用PropertySource注解来将外部属性文件加载到应用程序中。该注解通常用于指定application.properties文件的位置或自定义属性文件的位置。 PropertyS…

    Java 2023年5月19日
    00
  • spring boot项目如何采用war在tomcat容器中运行

    下面是Spring Boot项目如何部署到Tomcat容器中运行的攻略: 一、将项目打成war包 Spring Boot项目通常打成jar包,但是要部署到Tomcat容器中需要将其打成war包。如果使用Maven构建项目,则只需在pom.xml文件中添加以下代码: <packaging>war</packaging> 这样项目就会被打…

    Java 2023年6月2日
    00
  • 浅谈一下Java中集合的迭代方式

    那我开始讲解“浅谈一下Java中集合的迭代方式”。首先介绍下迭代方式的概念,简单来说,迭代方式就是对集合进行重复操作的方式,它代表了一种遍历集合元素的能力。在Java中,主要有以下三种迭代方式: 1. foreach循环迭代 使用foreach循环迭代时,需要在循环头部声明一个与集合对象所存储元素类型相匹配的变量,然后在循环体中使用该变量进行操作: List…

    Java 2023年5月26日
    00
  • 基于Java SpringBoot的前后端分离信息管理系统的设计和实现

    基于Java SpringBoot的前后端分离信息管理系统的设计和实现 背景介绍 基于Java SpringBoot的前后端分离信息管理系统是一种常见的Web应用开发模式,它能够通过前后端分离的方式,实现代码的解耦,提高应用的开发效率和可维护性。本文将详细介绍如何设计和实现一个基于Java SpringBoot的前后端分离信息管理系统。 系统设计 本系统采用…

    Java 2023年5月19日
    00
  • Java中实现分布式定时任务的方法

    Java中实现分布式定时任务的方法有很多种,下面我为您介绍一下常见的三种实现方式: 1. 使用Quartz实现分布式定时任务 Quartz是一个功能强大的定时任务框架,它可以支持分布式部署。下面展示Quartz实现分布式定时任务的步骤: 引入Quartz的依赖包,可以通过maven进行引入: xml <dependency> <groupI…

    Java 2023年5月26日
    00
  • 关于Ubuntu Server 18.04 LTS 安装Tomcat并配置systemctl管理Tomcat服务的问题

    下面是详细的攻略: 环境准备 确保已经安装了Java环境,Tomcat需要依赖Java运行 sudo apt install default-jdk 下载Tomcat 可以在官网下载Tomcat https://tomcat.apache.org/download-90.cgi。 这里以apache-tomcat-9.0.52.tar.gz为例,在终端中执行…

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