如何使用kso​​ap2将String数组传递给webservice?

use*_*575 4 android web-services android-ksoap2

我在Android中使用Web客户端,ksoap2但我不能将字符串数组作为参数传递给webservice.

这是我的代码

String[] items={"hello","world"};
request.addproperty("str",items);
Run Code Online (Sandbox Code Playgroud)

has*_*ian 12

首先使用"soapUI"来查看正确的请求结构(如项目名称,项目名称空间,......).我们假设你想在请求中写这样的XML :(这里n0和n1是命名空间)

<n0:strarray xmlns:n0="http://n0 ..." xmlns:n1="http://n1 ...">
        <n1:string>hello</n1:string>
        <n1:string>world</n1:string>
</n0:strarray>
Run Code Online (Sandbox Code Playgroud)

从vector扩展一个类:

import java.util.Hashtable;
import java.util.Vector;

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

public class StringArraySerializer extends Vector<String> implements KvmSerializable {
      //n1 stores item namespaces:
    String n1 = "http://n1 ...";

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

        @Override
        public int getPropertyCount() {
                return this.size();
        }

        @Override
        public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
                arg2.setName = "string";
                arg2.type = PropertyInfo.STRING_CLASS;
            arg2.setNamespace = n1;
        }

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

}
Run Code Online (Sandbox Code Playgroud)

要构建请求,您必须执行此操作:

1 - 从这个类中创建一个新的Vector-Object:

StringArraySerializer stringArray = new StringArraySerializer();
Run Code Online (Sandbox Code Playgroud)

2 - 然后你可以添加元素:

stringArray.add("hello");
stringArray.add("world");
Run Code Online (Sandbox Code Playgroud)

3 - 然后用它创建一个PropertyInfo:

//n0 stores array namespace:
String n0 = "http://n0 ...";
stringArrayProperty = new PropertyInfo();
stringArrayProperty.setName("strarray");
stringArrayProperty.setValue(stringArray);
stringArrayProperty.setType(stringArray.getClass());
stringArrayProperty.setNamespace(n0);
Run Code Online (Sandbox Code Playgroud)

4 - 然后将所有属性添加到请求中:

Request = new SoapObject(NAMESPACE, METHOD_NAME);
Request.addProperty(stringArrayProperty);
Run Code Online (Sandbox Code Playgroud)

参考:

ksoap2-机器人,CodingTipsAndTricks