其他分享
首页 > 其他分享> > android – 在Ksoap2中的标记内嵌套属性

android – 在Ksoap2中的标记内嵌套属性

作者:互联网

嗨我想使用上面的肥皂xml请求肥皂

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:AvailCheck>
         <IUvail>
            <Unit>PC</Unit>
            <Qty>3000</Qty>
         </IUvail>
      </urn:AvailCheck>
   </soapenv:Body>
</soapenv:Envelope>

所以我使用kso​​ap库创建了一个代码.我为soapobject创建了一个对象

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

并添加了这样的属性

request.addProperty("Unit", "PC");
request.addProperty("Qty", "3000");

但问题是我无法添加< IUvail>在requset ..所以我怎么能添加这个?

解决方法:

你可以像这样传递一个复杂的对象(IUvail):

IUvail.java

import java.util.Hashtable;

import org.ksoap2.serialization.KvmSerializable;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;

public class IUvail implements KvmSerializable {
    private String unit;
    private int qty;

public IUvail() {}

public IUvail(String unit, int qty) {
    this.unit = unit;
    this.qty = qty;
}

public void setUnit(String unit) { this.unit = unit; }
public void setQty(int qty) { this.qty = qty;}
public String getUniy() { return unit;}
public int getQty() { return qty;}

public Object getProperty(int arg0) {
    switch(arg0) {
        case 0:
            return unit;
        case 1:
            return qty;
     }
     return null;
}

public int getPropertyCount() {
    return 2;
}

public void getPropertyInfo(int index, Hashtable arg1, PropertyInfo propertyInfo) {
    switch(index){
        case 0:
            propertyInfo.name = "unit";
            propertyInfo.type = PropertyInfo.STRING_CLASS;
            break;
        case 1:
            propertyInfo.name = "qty";
            propertyInfo.type = PropertyInfo.INTEGER_CLASS;
            break;
        default:
            break;
    }
}

public void setProperty(int index, Object value) {
    switch(index) {
        case 0:
            this.unit = value.toString();
            break;
        case 1:
            this.qty = Integer.parseInt(value.toString());
            break;
        default:
            break;
   }
}  }

然后

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
IUvail iuvail = new IUvail();
iuvail.setUnit("PC");
iuvail.setQty(3000);
request.addProperty("IUvail", iuvail);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
            SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
envelope.addMapping(TARGET_NAMESPACE, "IUvail", new IUvail.getClass());

AndroidHttpTransport transport = new AndroidHttpTransport(URL);
try {
    transport.call(NAMESPACE + METHOD_NAME, envelope);
    /* Get the response: it depends on your web service implementation */
} catch (Exception e) {
    e.printStackTrace();
}

NAMESPACE,URL,METHOD_NAME和TARGET_NAMESPACE取决于您的ws.

标签:ksoap2,android,android-ksoap2,xml
来源: https://codeday.me/bug/20191003/1847028.html