Tengo un Cliente Web en Android utilizando ksoap2 pero no puedo pasar la cadena matriz como parámetro para el webservice.

Aquí está mi código

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

OriginalEl autor user903575 | 2011-08-20

2 Comentarios

  1. 11

    Primer uso «soapUI» para ver la correcta solicitud de la estructura(como nombres de elementos,elemento de espacios de nombres , …).
    Suponemos que desea escribir como este XML en la solicitud:(aquí n0 y n1 son los espacios de nombres)

    <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 de 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 construir la solicitud tienes que hacer esto:

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

    StringArraySerializer stringArray = new StringArraySerializer();

    2-a continuación, puede agregar elementos:

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

    3-a continuación, crear una PropertyInfo con:

    //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-después de agregar todas las propiedades a la solicitud:

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

    Referencia:

    ksoap2-android,CodingTipsAndTricks

    Usted necesita para resumir los ejemplos en su respuesta, o es probable que sea eliminado. Si el enlace se rompe, lo hace esta respuesta 🙂
    ¿Qué espacio de nombres que tengo que poner en n1 & n0 ??
    La manera más fácil es esta:el Uso de SoapUI y ver la correcta solicitud.Usted puede encontrar los espacios de nombres no.
    necesitamos de tu ayuda pls. consulte en este enlace http://stackoverflow.com/questions/19198017/pass-arraylist-data-into-soap-web-service-in-android ¿cómo cani pasar de la matriz de datos para el servicio de JABÓN?
    de esta manera son adecuados para HashMap demasiado?

    OriginalEl autor hasanghaforian

  2. 0

    es como que usted debería añadir uno por 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;
    }
    }

    OriginalEl autor Li Che

Dejar respuesta

Please enter your comment!
Please enter your name here