android - consumir - ¿Cómo puedo lanzar un String a un SoapObject en ksoap2?
ksoap2 android gradle (3)
Digamos que someObject es un objeto con los miembros CategoryId, Name, Description. Si obtiene estos miembros de objeto en la respuesta, puede guardarlos en algún objeto haciendo esto:
SoapObject response = (SoapObject)envelope.getResponse();
someObject.CategoryId = Integer.parseInt(response.getProperty(0).toString());
someObject.Name = response.getProperty(1).toString();
someObject.Description = response.getProperty(2).toString();
EDITAR:
Ok, veo el problema ahora.
Para obtener un objeto social, solo la forma en que puedo pensar es:
1) analizar la cadena almacenada 2) almacenar todos los campos de datos en variables locales
Parse stored string:
start loop
int x = something
string y = something
double z = something
end loop
3) crea un nuevo objeto usando las variables
someObject.fieldx = x
someObject.fieldy = y
someObject.fieldz = z
4) crear un nuevo objeto
SoapObject sp_Object = new SoapObject(NAMESPACE, METHOD_NAME);
5) crea una información de propiedad usando el objeto en el paso 3
PropertyInfo prop = new PropertyInfo();
prop.setNamespace(NAMESPACE);
prop.setType(someObject.getClass());
prop.setValue(someObject);
6) agregue la info de propiedad al objeto soa en el paso 4
sp_Object.addProperty(prop);
Luego puede usar el objeto sp_Object de soapobject para su analizador.
En mi aplicación de Android uso ksoap2 para la comunicación con un servidor. Descargo una cierta estructura compleja de información deportiva a través de una solicitud de jabón y la analizo más adelante en mi programa.
Lo que quiero hacer es de alguna manera "guardar" esta estructura compleja para poder analizarla más tarde cuando toda la información en esa estructura sea definitiva y no cambie más para poder mostrarla sin llamar nuevamente al servicio web.
Llegué tan lejos que puedo convertir toda la estructura en una cadena con el método toString () de la clase SoapObject para poder guardarlo en las preferencias Compartidas de la aplicación.
PERO: Para analizar la cadena con mi analizador que uso cuando descargo los datos directamente desde el servidor web, lo necesito como un SoapObject. Intenté algo como esto:
SoapObject soapObj = (SoapObject) dataAsStringFromSharedPrefs;
Pero no puedo lanzar una cadena a un SoapObject de esa manera.
Esto aquí parece funcionar:
public SoapObject createSoapObjectFromSoapObjectString(String soapObjectString)
{
// Create a SoapSerializationEnvelope with some config
SoapSerializationEnvelope env = new SoapSerializationEnvelope(SoapEnvelope.VER11);
env.dotNet = true;
// Set your string as output
env.setOutputSoapObject(soapObjectString);
// Get response
SoapObject so = (SoapObject) env.getResponse();
return so;
}
Espero que esto funcione bien para convertir una cadena XML de jabón en un SoapObject
public SoapObject string2SoapObject(byte[] bytes)
{
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER12);
SoapObject soap=null;
try {
ByteArrayInputStream inputStream=new ByteArrayInputStream(bytes);
XmlPullParser p= Xml.newPullParser();
p.setInput(inputStream, "UTF8");
envelope.parse(p);
soap=(SoapObject)envelope.bodyIn;
} catch (Exception e) {
e.printStackTrace();
}
return soap;
}