如何在Android中使用KSoap 2 [英] How to use KSoap 2 in android

查看:89
本文介绍了如何在Android中使用KSoap 2的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚接触过ksoap2,因为它在android应用中使用了自己的asp .net web服务. 我在互联网上发现了很少的有用资源,并且已经在android应用中实现了我的网络服务.

I've just came across to ksoap2 for using my own asp .net webservices in android apps. I've found few great resources over internet and I've implemented my webservice in android app.

以下是我消耗的网络服务响应:

Following is the webservice's response I consumed:

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>

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

For consuming the above service I implemented the following code:

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

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

It's working fine.. But now I'm going to consume a service. The required service's request format is as follow:

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的新手,所以我需要您的帮助.

I've consumed the same services in my previous iPhone application using XMLReader classes but as I'm a newbie in android, I need your help guys.

:)

感谢大家阅读我的帖子!

Thanks to all for reading my post!

推荐答案

用于集成KSoap 2您必须将依赖项添加到build.gradle文件中.

For Integrating KSoap 2 You have to add dependency to your build.gradle file.

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

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

修改AndroidManifest.xml 为了在Internet上公开的Web服务上进行肥皂呼叫,需要添加其他权限.

Modify AndroidManifest.xml In order to make soap calls on a web service exposed on the internet, additional permissions need to be added.

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

这篇关于如何在Android中使用KSoap 2的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆