如何在 Android 中使用 KSoap 2

2024-05-05

我刚刚发现 ksoap2 在 Android 应用程序中使用我自己的 asp .net Web 服务。 我在互联网上发现了一些很棒的资源,并且我已经在 Android 应用程序中实现了我的网络服务。

以下是我使用的网络服务的响应:

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <CheckAuthenticationResponse xmlns="http://tempuri.org/">
      <CheckAuthenticationResult>boolean</CheckAuthenticationResult>
    </CheckAuthenticationResponse>
  </soap:Body>
</soap:Envelope>

为了使用上述服务,我实现了以下代码:

public static Boolean isAuthenticated(String UserName, String Password)
{
    String NAMESPACE = "http://tempuri.org/";
    String METHOD_NAME = "CheckAuthentication";
    String SOAP_ACTION = "http://tempuri.org/CheckAuthentication";
    String URL = "http://primehangout.com/primehangoutweb.asmx";

    SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
    PropertyInfo pi = new PropertyInfo();
    pi.setName("UserId");
    pi.setValue(UserName);
    pi.setType(String.class);
    Request.addProperty(pi);

    PropertyInfo pi2 = new PropertyInfo();
    pi2.setName("Password");
    pi2.setValue(Password);
    pi2.setType(String.class);
    Request.addProperty(pi2);


    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(Request);
    try
    {
    AndroidHttpTransport transp = new AndroidHttpTransport(URL);
    transp.call(SOAP_ACTION, envelope);
    SoapPrimitive result = (SoapPrimitive)envelope.getResponse();

    return Boolean.parseBoolean(result.toString());
    }
    catch(Exception e)
    {

    }


    return false;
}

工作正常.. 但现在我要使用一项服务。 所需服务的请求格式如下:

POST /primehangoutweb.asmx HTTP/1.1
Host: primehangout.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/GetComment"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <AuthSoapHd xmlns="http://tempuri.org/">
      <strUserName>string</strUserName>
      <strPassword>string</strPassword>
    </AuthSoapHd>
  </soap:Header>
  <soap:Body>
    <GetComment xmlns="http://tempuri.org/">
      <UId>string</UId>
      <refID>int</refID>
    </GetComment>
  </soap:Body>
</soap:Envelope>

所需服务的响应如下:

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <GetCommentResponse xmlns="http://tempuri.org/">
          <GetCommentResult>
            <xsd:schema>schema</xsd:schema>xml</GetCommentResult>
        </GetCommentResponse>
      </soap:Body>
    </soap:Envelope>

我在以前的 iPhone 应用程序中使用 XMLReader 类使用了相同的服务,但由于我是 Android 新手,我需要你们的帮助。

:)

感谢大家阅读我的帖子!


为了集成 KSoap 2,您必须将依赖项添加到 build.gradle 文件中。

repositories {
    maven { url 'https://oss.sonatype.org/content/repositories/ksoap2-android-releases/' }
}

dependencies {
    compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.2'
 }

Modify AndroidManifest.xml为了对互联网上公开的 Web 服务进行肥皂调用,需要添加额外的权限。

<uses-permission android:name="android.permission.INTERNET" />

然后深入代码

Thread thread = new Thread() {
            @Override
            public void run() {
                String SOAP_ACTION = "https://www.w3schools.com/xml/FahrenheitToCelsius";
                String METHOD_NAME = "FahrenheitToCelsius";
                String NAMESPACE = "https://www.w3schools.com/xml/";
                String URL = "https://www.w3schools.com/xml/tempconvert.asmx";

                //Initialize soap request
                SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
                //Use this to add parameters
                request.addProperty("Fahrenheit", "10");

                //Declare the version of the SOAP request
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                envelope.dotNet = true;
                envelope.setOutputSoapObject(request);

                try {
                    //Needed to make the internet call
                    HttpTransportSE transport = new HttpTransportSE(URL);
                    List<HeaderProperty> headerList = new ArrayList<HeaderProperty>();
                    headerList.add(new HeaderProperty("Authorization", "Basic " + Base64.encode((username + ":" + password).getBytes())));

                    transport.call(SOAP_ACTION, envelope, headerList);
                    //Get the Response from the envelope body.
                    SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
                } catch (Exception e) {
                    Log.e("TESTS", "KSOAP2", e);
                }
            }
        };

        thread.start();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Android 中使用 KSoap 2 的相关文章

随机推荐

  • 使用 Swift p2/OAuth2 并行刷新 OAuth2 访问令牌请求

    我在用https github com p2 OAuth2 https github com p2 OAuth2用于通过 OAuth2 连接到我的应用程序的后端 效果非常好 我遇到的问题是 当访问令牌过期并且同时发生多个请求时 其中一些请求
  • 不理解 gluOrtho2D 函数

    我不能做什么gluOrtho2D 函数是做什么的 是否将原点固定在 OpenGL 窗口上的某个特定点或其他位置 这是因为gluOrtho2D 1 1 1 1 将原点固定在窗口的中间 如果它在某个时刻没有修复原点 那么有什么方法可以修复原点
  • AWS S3 使用 boto3 预签名 url - 签名不匹配

    我想为我的存储桶中的对象创建一个预签名 URL 我使用以下 python 代码 client boto3 client s3 aws access key id os environ AWS ACCESS KEY aws secret ac
  • kqueue() 和 O_NONBLOCK

    如果您使用 kqueue 是否应该在文件描述符上设置 O NONBLOCK 换句话说 无论 O NONBLOCK 是否设置 kqueue 是否保证就绪文件描述符上的下一个 I O 操作不会阻塞 如果您使用 kqueue 是否应该在文件描述符
  • 检查 makefile 中的文件大小,如果文件太短则停止

    有没有办法检查特定文件的大小是否小于某个常量 我在 makefile 中假设有关大小的事情 并希望确保如果不满足我的假设 我会收到错误 类似于断言 但在 makefile 中 if filesize file gt C then error
  • 查找 PDF 文件中的文本位置

    我有一个 PDF 文件 我试图在 PDF 中查找特定文本并使用 Python 突出显示它 我发现pypdf https pypi org project pypdf 哪个行突出显示 PDF 的一部分 https gist github co
  • Google 附加组件 logourl 来源自 https://www.gstatic.com/images/icons/material

    示例 Google Apps 脚本插件位于此处 https developers google com apps script add ons cats quickstart https developers google com apps
  • 适合快速获取和快速删除的java集合

    我想知道是否有一个合适的java接口用于 快速 获取 按索引 和 快速 删除 我所说的 快 是指比O n 编辑 get 方法仅用于从集合中随机选择一个元素 另外 标题应该说 集合 而不是 界面 平衡二叉搜索树具有 O log n 的 获取
  • 为什么我们应该在 jQuery 中使用匿名函数而不是直接使用函数?

    一些 jQuery 方法需要一个函数作为参数 但为了工作 它们应该接收一个匿名函数作为参数 而不是直接接收函数 如下例所示 a on click function retornaNada 而不是 a on click retornaNada
  • 如何使用方法更改类属性?

    我有一个 Django 模型类 它有一些默认属性 我想更改complete通过调用函数来改变变量 class Foo complete False def set complete true complete True 但打电话后set c
  • C++ 使用命名空间来避免长路径

    我仍在学习 C 之前从未真正创建过自己的命名空间 我正在对它们进行试验 虽然我已经完成了大部分工作 但有一件事我似乎仍然无法做到 我希望能够在类中调用静态方法 而无需输入类似的内容NameOfClass method 我认为代码应该如下所示
  • 如何在控制台应用程序中创建可终止的 while 循环?

    我目前正在寻找此 c 控制台应用程序功能的解决方案 我尝试寻找一种创建 while 循环的方法 该循环可以终止下面的代码 但我只得出与中断 while 循环相关的结果或不将其放入 while 循环的解决方案 int P1Choice int
  • Reactjs 中的扩展语法“...this.props”感觉很奇怪

    使用扩展运算符与诸如此类的对象发生反应propsJSX 中似乎没有输出我所期望的内容
  • 云代码:从 URL 创建 Parse.File

    我正在开发一个云代码函数 它使用 facebook graph API 来检索用户的个人资料图片 因此 我可以访问正确的图片 URL 但无法从该 URL 创建 Parse File 这几乎就是我正在尝试的 Parse Cloud httpR
  • 检查一个数据框中的单词是否出现在另一个数据框中(python 3,pandas)

    问题 我有两个数据框 想要删除它们之间的任何重复项 部分重复项 DF1 DF2 Phrases Phrases Little Red Little Red Corvette Grow Your Grow Your Beans James B
  • vm.dirty_ratio 和 vm.dirty_background_ratio 之间的区别?

    我目前正在试验中找到的内核参数 proc sys vm 尤其dirty ratio and dirty background ratio 内核文档对两者都有以下解释 脏背景比例 包含 以包含空闲页面的总可用内存的百分比表示 和可回收页 后台
  • GCC 4.7 字符串文字的源字符编码和执行字符编码?

    Linux x86 64 上的 GCC 4 7 是否具有默认字符编码 用于验证和解码 C 源文件中字符串文字的内容 这是可配置的吗 此外 当将字符串数据从字符串文字链接到输出的数据部分时 它是否具有默认的执行字符编码 这是可配置的吗 在任何
  • Excel VBA 将工作表保存到具有唯一名称的多个文件夹

    感谢您的所有意见 下面的代码是收到的输入的最终结果 我已经对这些错误进行了评论 这些错误直接关系到保存到数组中定义的文件夹中的总体预期结果 Option Explicit Public EngName As String TeamNum A
  • kubernetes nginx ingress 无法将 HTTP 重定向到 HTTPS

    我有一个托管在 Google Cloud 平台中的网络应用程序 该应用程序位于负载均衡器后面 而负载均衡器本身位于入口后面 入口设置了 SSL 证书 并按预期接受 HTTPS 连接 但有一个问题 我无法让它将非 HTTPS 连接重定向到 H
  • 如何在 Android 中使用 KSoap 2

    我刚刚发现 ksoap2 在 Android 应用程序中使用我自己的 asp net Web 服务 我在互联网上发现了一些很棒的资源 并且我已经在 Android 应用程序中实现了我的网络服务 以下是我使用的网络服务的响应 HTTP 1 1