2011-08-20 135 views

回答

11

首先使用 “的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> 

从矢量扩展类:

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 - 使一个新的矢量对象:

StringArraySerializer stringArray = new StringArraySerializer(); 

2-然后可以添加元素:

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

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); 

4-然后添加所有属性的请求:

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

参考:

ksoap2-android,CodingTipsAndTricks

+1

您需要在答案中总结这些示例,否则它可能会被删除。如果链接中断,那么这个答案:) –

+0

我必须在n1&n0中放置什么名称空间? –

+0

@VivekSingh最简单的方法是:使用SoapUI并查看正确的请求。您可以在其中找到名称空间。 – hasanghaforian

0

这就像是你一个一个地添加它。

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; 
     } 
    } 
相关问题