我刚刚遇到ksoap2在android应用程序中使用我自己的asp .net webservices。 我在互联网上找到了很少的优秀资源,我在Android应用程序中实现了我的web服务。
以下是我使用的网络服务响应:
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>
我使用XMLReader类在我之前的iPhone应用程序中使用了相同的服务,但由于我是android的新手,我需要你的帮助。
:)
感谢大家阅读我的帖子!
答案 0 :(得分:1)
对于集成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'
}
修改AndroidManifest.xml
为了在Internet上公开的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();