如何在Android中进行SOAP解析?
我是这个SOAP web服务的新手。这是我的ksoap库依赖性如何在Android中进行SOAP解析?,android,android-ksoap2,Android,Android Ksoap2,我是这个SOAP web服务的新手。这是我的ksoap库依赖性 repositories { maven { url 'https://oss.sonatype.org/content/repositories/ksoap2-android-releases/' } } dependencies { compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.1' } 请关注我的SOAP请求和响应 POST /loy
repositories {
maven { url 'https://oss.sonatype.org/content/repositories/ksoap2-android-releases/' }
}
dependencies {
compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.1'
}
请关注我的SOAP请求和响应
POST /loyaltywebservice/LoyaltyWebService.asmx HTTP/1.1
Host: host url is here
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/AttemptLogin"
<?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>
<UserCredential xmlns="http://tempuri.org/">
<userName>string</userName>
<password>string</password>
</UserCredential>
</soap:Header>
<soap:Body>
<AttemptLogin xmlns="http://tempuri.org/">
<LoyalCustCode>string</LoyalCustCode>
<PwdStr>string</PwdStr>
</AttemptLogin>
</soap:Body>
</soap:Envelope>
首先,您需要在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.1'
}
然后使用下面的代码获取API响应-
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapObject loyal = new SoapObject(NAMESPACE, "LoyalCustCode");
loyal.setInnerText("custcode");
request.addSoapObject(loyal);
loyal = new SoapObject(NAMESPACE, "PwdStr");
loyal.setInnerText("pass");
request.addSoapObject(loyal);
Element headers = new Element().createElement(NAMESPACE, "UserCredential");
Element username = new Element().createElement(NAMESPACE, "userName");
username.addChild(Node.TEXT, "test");
headers.addChild(Node.ELEMENT, username);
Element pass = new Element().createElement(NAMESPACE, "password");
pass.addChild(Node.TEXT, "1234");
headers.addChild(Node.ELEMENT, pass);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.headerOut = new Element[1];
envelope.headerOut[0] = headers;
envelope.setOutputSoapObject(request);
HttpTransportSE ht = new HttpTransportSE(URL);
try {
ht.call(SOAP_ACTION, envelope);
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
resultado = response.toString();
Log.i("Resultado: ", resultado);
} catch (Exception e) {
Log.i("Error: ", e.getMessage());
e.printStackTrace();
return false;
}
什么样的错误?分享你的错误日志SoapCliente I/Resultado::Function AttemptLogin error:-2147467261请发布你的日志,因为在一行日志中不容易准确知道问题出在哪里(Androin或PHP)?忍者只收到了这个错误,什么都没有收到,为什么我感到困惑
repositories {
maven { url 'https://oss.sonatype.org/content/repositories/ksoap2-android-releases/' }
}
dependencies {
compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.1'
}
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapObject loyal = new SoapObject(NAMESPACE, "LoyalCustCode");
loyal.setInnerText("custcode");
request.addSoapObject(loyal);
loyal = new SoapObject(NAMESPACE, "PwdStr");
loyal.setInnerText("pass");
request.addSoapObject(loyal);
Element headers = new Element().createElement(NAMESPACE, "UserCredential");
Element username = new Element().createElement(NAMESPACE, "userName");
username.addChild(Node.TEXT, "test");
headers.addChild(Node.ELEMENT, username);
Element pass = new Element().createElement(NAMESPACE, "password");
pass.addChild(Node.TEXT, "1234");
headers.addChild(Node.ELEMENT, pass);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.headerOut = new Element[1];
envelope.headerOut[0] = headers;
envelope.setOutputSoapObject(request);
HttpTransportSE ht = new HttpTransportSE(URL);
try {
ht.call(SOAP_ACTION, envelope);
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
resultado = response.toString();
Log.i("Resultado: ", resultado);
} catch (Exception e) {
Log.i("Error: ", e.getMessage());
e.printStackTrace();
return false;
}