使用ksoap2传递字符串数组到webservice

问题描述

使用ksoap2传递字符串数组到webservice
在android程序中有一个Web Client使用ksoap2,但是还是不能把字符串数组作为一个参数传递到webservice中。
贴出相关代码:

String[] items={""hello""world""};request.addproperty(""str""items);

请求大家的帮忙,谢谢!

解决方案

好像只能一条条加

public class ExtendedSoapObject extends SoapObject{    public ExtendedSoapObject(String namespace String name)    {        super(namespace name);    }    public ExtendedSoapObject(SoapObject o)    {        super(o.getNamespace() o.getName());        for (int i = 0; i < o.getAttributeCount(); i++)        {            AttributeInfo ai = new AttributeInfo();            o.getAttributeInfo(i ai);            ai.setValue(o.getAttribute(i));            addAttribute(ai);        }        for (int i = 0; i < o.getPropertyCount(); i++)        {            PropertyInfo pi = new PropertyInfo();            o.getPropertyInfo(i pi);            pi.setValue(o.getProperty(i));            addProperty(pi);        }    }    @Override    public SoapObject addProperty(String name Object value)    {        if (value instanceof Object[])        {            Object[] subValues = (Object[]) value;            for (int i = 0; i < subValues.length; i++)            {                super.addProperty(name subValues[i]);            }        }        else        {            super.addProperty(name value);        }        return this;    }    @Override    public Object getProperty(String name)    {        List<Object> result = new ArrayList<Object>();        for (int i = 0; i < properties.size(); i++)        {            PropertyInfo prop = (PropertyInfo) properties.elementAt(i);            if (prop.getName() != null && prop.getName().equals(name))            {                result.add(unwrap(prop));            }        }        if (result.size() == 1)        {            return result.get(0);        }        else if (result.size() > 1)        {            return result.toArray(new Object[0]);        }        else        {            return null;        }    }    public Object[] getArrayProperty(String name)    {        Object o = getProperty(name);        Object values[] = null;        if (o != null)        {            if (o instanceof Object[])            {                values = (Object[]) o;            }            else            {                values = new Object[1];                values[0] = o;            }        }        return values;    }    Object unwrap(Object o)    {        if (o instanceof PropertyInfo)        {            return unwrap(((PropertyInfo) o).getValue());        }        else if (o instanceof SoapPrimitive || o instanceof SoapObject)        {            return o;        }        return null;    }}

不知此类对你是否有参考价值

解决方案二:
首先使用""soapUI""来看正确的请求结构(如名字 item names命名空间item namespaces)。假定你想在请求里这样写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>

从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());        }}

创建请求:
1.创建一个新的Vector-Object

StringArraySerializer stringArray = new StringArraySerializer();

2.然后再添加元素:

stringArray.add(""hello"");stringArray.add(""world"");

3.创建一个 PropertyInfo

//n0存储array namespace:String n0 = ""http://n0 ..."";stringArrayProperty = new PropertyInfo();stringArrayProperty.setName(""strarray"");stringArrayProperty.setValue(stringArray);stringArrayProperty.setType(stringArray.getClass());stringArrayProperty.setNamespace(n0);

4.给请求添加所有的属性

Request = new SoapObject(NAMESPACE METHOD_NAME);Request.addProperty(stringArrayProperty);

解决方案三:
不用楼上那么复杂吧?直接建一个实体对象,然后json序列化成字符串传到webservice,然后那边反序列化成对象。这样不方便很多吗?

时间: 2024-12-22 16:08:29

使用ksoap2传递字符串数组到webservice的相关文章

android-Android-转换字符串数组到json

问题描述 Android-转换字符串数组到json 传递字符串数组到JavaScript,好像不能实现,因此想转换字符串数组到Json,然后发送到JavaScript.不知道怎么实现? 解决方案 你标题是android的 问的是js问题?? 呵呵js原生支持json,字符串写成 [{""id"":1name"":""小猪""}{""id"":2name"&q

java-传递ImageView数组到bitmap

问题描述 传递ImageView数组到bitmap 如题,如何传递? ImageView数组: private Integer[] Imgid = { R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4, }; Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),**R.drawable.pic1[]???**); 解决方案 ImageVie

JavaScript 保存数组到Cookie的代码_javascript技巧

JavaScript中数组是无法直接保存为Cookie的(PHP可以),那要将数组转存为字符串,再保存在Cookie中,简单的一维数组我们直接用toString()或者join就可以了: JavaScript中toString函数方法是返回对象的字符串表示. 使用方法:objectname.toString([radix]) 其中objectname是必选项.要得到字符串表示的对象. radix是可选项.指定将数字值转换为字符串时的进制. join是其中一个方法. 格式:objArray.joi

List或数组到String的转换

在编程过程中偶尔会遇到需要将List或数组以某个字符间隔的形式将其拼接成一个字符串,比如在发送邮件时,to列表是以分号分割的字符串,然而在程序中我们可能会一List<String>或String[]的形式存在,此时就需要做List或数组到String的转换.在C#中,String类提供了一个叫Join的方法,因而我们使用一句代码就可以完成这样的工作: string result = string.Join("; ", toList.ToArray()); 但是在Java中貌

JavaScript 保存数组到Cookie的代码

JavaScript中数组是无法直接保存为Cookie的(PHP可以),那要将数组转存为字符串,再保存在Cookie中,简单的一维数组我们直接用toString()或者join就可以了: JavaScript中toString函数方法是返回对象的字符串表示. 使用方法:objectname.toString([radix]) 其中objectname是必选项.要得到字符串表示的对象. radix是可选项.指定将数字值转换为字符串时的进制. join是其中一个方法. 格式:objArray.joi

关于URL的传递字符串问题

前几天在调程序的时候遇到了比较郁闷的问题,我用URL从一个页面传递字符串到另一个页面的时,出 现了个奇怪的问题,我要传递的字符串是"DK51+700中继站":可是另一个页面接收到字符串却是: "DK51 700中继口":加号变成了空格,"站"不能解析出来,变成了不能识别的符号"口". 我上网查找了原因:URL中有些字符被转义,比如空格被编码成加号,于是传的参数明明是加号,获取 的值却成了空格. 按照网上的建议,我们应该对要传递

新手求教,关于传递字符串数组的问题

问题描述 新手求教,关于传递字符串数组的问题 以下是我写的c primer plus 第11章习题10的程序,问题是我输入字符串后,用1以外的方式排序,就无法恢复原序列了.也就是每次调用函数都改变了原本数组的顺序,我实在找不到问题出在哪.特请高手指教,如果我的代码还有其他的什么毛病也请指出来.O(∩_∩)O谢谢 #include<stdio.h> #include<string.h> #include<ctype.h> #define LIM 10 #define MA

关于C++用SAFEARRAY传递字符串数组的问题

问题描述 关于C++用SAFEARRAY传递字符串数组的问题 碰到个问题,需要用VARIANT变量传递字符串数组,想到使用SAFEARRAY,就写了如下代码,结果运行出现堆内存错误,请问该如何改正,多谢赐教 int _tmain(int argc, _TCHAR* argv[]) { SAFEARRAY psa; SAFEARRAYBOUND rgsabound[1]; rgsabound[0].cElements=2; rgsabound[0].lLbound=0; psa = SafeArr

jni-android中向底层传递字符串

问题描述 android中向底层传递字符串 我想在android的中将一个字符串传递到底层,然后在底层判断传过来的字符串是否与 底层算法生成的一样,我该怎么做呢 ,求帮助谢谢 解决方案 http://blog.csdn.net/zgyulongfei/article/details/7409441