【问题标题】:How to pass String of array values to webservice using ksoap2?如何使用 ksoap2 将数组值的字符串传递给 webservice?
【发布时间】:2016-07-24 09:37:26
【问题描述】:

我在 Android 中有一个使用 ksoap2 的 Web 客户端,但我无法将字符串数组作为参数传递给 Web 服务。我在下面附上了我的代码和服务。

服务:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mys="http://182.73.50.69:6510/Myservice" xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays ">
       <soapenv:Header/>
       <soapenv:Body>
          <mys:addworkload>
             <!--Optional:-->
             <mys:member>Antony</mys:member>
             <!--Optional:-->
             <mys:prj>
                <!--Zero or more repetitions:-->
                <arr:string>Prj1</arr:string>
                <arr:string>Prj2</arr:string>
                <arr:string>Prj3</arr:string>
             </mys:prj>
             <!--Optional:-->
             <mys:val>
                <!--Zero or more repetitions:-->
                <arr:int>2</arr:int>
                <arr:int>2</arr:int>
                <arr:int>2</arr:int>
             </mys:val>
             <!--Optional:-->
             <mys:date>2016-05-29</mys:date>
          </mys:addworkload>
       </soapenv:Body>
    </soapenv:Envelope>

安卓代码:

SoapObject Search= new SoapObject(Constants.NAMESPACE, "addworkload");
        List<String> companies =  new ArrayList<>();
        companies.add("Prj1");
        companies.add("Prj2");
        companies.add("Prj3");

        List<String> ones =  new ArrayList<>();
        ones.add("2");
        ones.add("2");
        ones.add("2");

        SoapObject soapCompanies = new SoapObject(Constants.NAMESPACE, "prj");
        for (String i : companies){
            soapCompanies.addProperty("string", i);
        }
        request.addSoapObject(soapCompanies);

        SoapObject val = new SoapObject(Constants.NAMESPACE, "val");
        for (String i : ones){
            val.addProperty("int", i);
        }
        request.addSoapObject(val);

请告诉我我在哪里错过了这里的链接..

【问题讨论】:

  • 嘿,你检查过我的解决方案了吗?

标签: android web-services wsdl ksoap2 android-ksoap2


【解决方案1】:

您将需要两个自定义的可序列化类来扩展您想要持有的类型的集合。它还应该实现KvmSerializable。

String 数组的类,

public class CustomKvmSerializable extends Vector<String> implements KvmSerializable {

    private String tag;
    private Class klass;

    public CustomKvmSerializable(String tag, Class klass) {
        this.tag = tag;
        this.klass = klass;
    }

    @Override
    public Object getProperty(int i) {
        return this.get(i);
    }

    @Override
    public int getPropertyCount() {
        return 1;
    }

    @Override
    public void setProperty(int i, Object o) {
        this.add(o.toString());
    }

    @Override
    public void getPropertyInfo(int i, Hashtable hashtable, PropertyInfo propertyInfo) {
        propertyInfo.name = tag;
        propertyInfo.type = klass;
    }

    @Override
    public String getInnerText() {
        return null;
    }

    @Override
    public void setInnerText(String s) {

    }
}

为整数数组创建一个类似的扩展Vector&lt;Integer&gt;的类。

要在您的请求中使用它,

ArrayList<PropertyInfo> props = new ArrayList<>();

// For string array
CustomKvmSerializable stringVector = new CustomKvmSerializable("string", String.class);
for(String str : yourStringArray){
    stringVector.add(str);
}
PropertyInfo instrumentInfo = new PropertyInfo();
instrumentInfo.setName("prj");
instrumentInfo.setValue(stringVector);
instrumentInfo.setType(stringVector.getClass());
props.add(instrumentInfo);

// For integer array
CustomKvmSerializable integerVector = new CustomKvmSerializable("int", String.class);
for(Integer integer : yourIntegerArray){
    integerVector.add(integer);
}
PropertyInfo instrumentInfo = new PropertyInfo();
instrumentInfo.setName("val");
instrumentInfo.setValue(integerVector);
instrumentInfo.setType(integerVector.getClass());
props.add(instrumentInfo);

当您创建请求时,

SoapObject search = new SoapObject(Constants.NAMESPACE, "addworkload");

// Add the properties to your request
for (PropertyInfo property : props) {
    request.addProperty(property);
}

【讨论】:

    猜你喜欢
    • 2012-10-11
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    相关资源
    最近更新 更多