Cómo pasar String array a webservice usando ksoap2?

Tengo un Cliente Web en Android usando ksoap2 pero no puedo pasar la matriz de cadenas como un parámetro para el servicio web.

Aquí está mi código

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

Primero use "soapUI" para ver la estructura de solicitud correcta (como nombres de elementos, espacios de nombres de elementos, …). Suponemos que desea escribir como este XML en la solicitud: (aquí n0 y n1 son namespaces)

 <n0:strarray xmlns:n0="http://n0 ..." xmlns:n1="http://n1 ..."> <n1:string>hello</n1:string> <n1:string>world</n1:string> </n0:strarray> 

Extender una clase del 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()); } } 

Para crear la solicitud tienes que hacer esto:

1-hacer un nuevo Vector-Objeto de esta clase:

 StringArraySerializer stringArray = new StringArraySerializer(); 

2-entonces usted puede agregar elementos:

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

3-entonces usted crea un PropertyInfo con él:

 //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-entonces agrega todas las propiedades a la solicitud:

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

Referencia:

Ksoap2-android, CodingTipsAndTricks

Es como que usted lo añadirá uno a uno.

 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; } } 
  • Respuesta de retorno de loopj asynchttpclient de Android
  • No se pueden llamar métodos de servicio web desde el emulador de proyectos android
  • Envío de XML a un servicio web en Android
  • Analizador de XML común de Android
  • HttpURLConnection getResponseCode () deos no devuelve si no hay conexión a Internet
  • Java.net.UnknownHostException: No se puede resolver el host "<url>": ninguna dirección asociada con hostname y End of input en el carácter 0 de
  • Analizando la respuesta ksoap2
  • KSOAP2 java.lang.RuntimeException: No se puede serializar
  • Android: ksoap, "UnknownHostException: host no resuelto" dependiendo de la API
  • Android loopj + GCMIntentService enviar mensaje a un Handler en un hilo muerto
  • Envío de imágenes de la galería al servicio web mediante SOAP
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.