PDA

Ver la Versión Completa : Jsonserializer


gohan0189
03/04/12, 01:09:44
Hola tengo una duda lo que pasa es que mi web service me manda esto:

<string>{"Id":958521,"Poliza":{"Id":958520,"Folio":"958520","Derechos":0,"ComisionImporte":1234.5,"ComisionPct":10,"RecargosImporte":0,"RecargosPct":0,"Estatus":0,"Gastos":0,"Aseguradora":{"Id":2778,"NombreCompleto":"AXA SEGUROS SA DE CV","Clave":"AXA","DeshabilitaCalculos":false,"CalculoComisionIncluyeRecargo":false,"CalculoRecargoIncluyeDerechos":false},"Impuesto":{"Clave":"IVA-16","Nombre":"NUEVO IVA","Porcentaje":16},"Impuesto":{"Id":2189,"Clave":"IVA-16","Nombre":"NUEVO IVA","Porcentaje":16},"Ramo":{"Clave":"AUT","Nombre":"AUTOS","Id":2569,"Xtype":"pol.aut","DivisionOperativa":0},"SubRamo":{"Clave":"AUT","Nombre":"AUTOS IND","Id":2570,"Flotilla":false}},"Serie":"12345","Motor":"12345","Placas":null,"ConductorHabitual":null,"Contacto":null,"CoberturaAuto":0,"Marca":{"Id":2447,"Clave":"DEF","Descripcion":"DEFAULT","Ubicacion":{"Id":2185,"Path":"1","Nombre":"GAB STA FE"},"CentroDeBeneficio":{"Id":4,"Path":"1.1","Nombre":"Loader"},"Propietario":{"Id":1,"Email":"[email protected]","Nombre":"Usuario Loader","Username":"loader"},"Permiso":2,"UsuarioAdd":{"Id":1,"Email":"xxxxxxx","Nombre":"Usuario Loader","Username":"loader"},"FechaAdd":"\/Date(1273271245000-0500)\/","UsuarioUMod":{"Id":1,"Email":"xxxxxxx","Nombre":"Usuario Loader","Username":"loader"},"FechaUMod":"\/Date(1273271245000-0500)\/","UsuarioDel":null,"FechaDel":null,"Estatus":1,"RefWinsef":null,"RequiereAutorizacionFlujo":false},"Modelo":"2010","Version":"version","Descripcion":"DEFAULT 2010 version","EndosoAlta":null,"EndosoBaja":null,"GrupoAsegurados":null,"Inciso":"12345","Estatus":1,"Prima":0,"BeneficiarioPreferente":null,"Identificador":null,"Empleado":null,"TarjetaBancaria":null,"Ubicacion":{"Id":2185,"Path":"1","Nombre":"GAB STA FE"},"CentroDeBeneficio":{"Id":2213,"Path":"1.1.2.1.1","Nombre":"TI y Sistemas"},"Propietario":{"Id":2343,"Email":"xxxxxx","Nombre":"José Carlos Guzmán","Username":"cguzman"},"Permiso":2,"UsuarioAdd":{"Id":2343,"Email":"[email protected]","Nombre":"José Carlos Guzmán","Username":"cguzman"},"FechaAdd":"\/Date(1331255081000-0600)\/","UsuarioUMod":{"Id":2343,"Email":"xxxxxx","Nombre":"José Carlos Guzmán","Username":"cguzman"},"FechaUMod":"\/Date(1331255081000-0600)\/","UsuarioDel":null,"FechaDel":null,"RefWinsef":null,"RequiereAutorizacionFlujo":false}</string>

y tengo una app que se encarga de deserializar y tengo lo siguiente

public class JSONDecoder {

public static Object decode(DecoderConfiguration config, String jsonString) throws InstantiationException, IllegalAccessException {

Object instance = null;

if (config != null && config.isList()) {

Field[] fields = config.mainType.getFields();
ArrayList<Object> al = new ArrayList<Object>();
JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON( jsonString );

if (fields != null && fields.length > 0) {

for (int i = 0; i < jsonArray.size(); i++) {

JSONObject json = jsonArray.getJSONObject( i );

instance = config.mainType.newInstance();

for (int j = 0; j < fields.length; j++) {

try {
setValue(config, instance, fields[ j ], json);
} catch (JSONException jsone) {
jsone.printStackTrace();
}

}

al.add(instance);

}

}

instance = al.toArray();

} else {

Field[] fields = config.mainType.getFields();

if (fields != null && fields.length > 0) {

JSONObject json = (JSONObject) JSONSerializer.toJSON(jsonString);

instance = config.mainType.newInstance();

for (int i = 0; i < fields.length; i++) {

try {
setValue(config, instance, fields[ i ], json);
} catch (JSONException jsone) {
jsone.printStackTrace();
}

}

}

}

return instance;

}

cuando llega a esta parte JSONObject json = (JSONObject) JSONSerializer.toJSON(jsonString); me manda detiene mi app , me gustaria saber si alguien sabe que error tengo

kriogeN
03/04/12, 01:31:13
Tanto como saber programar es saber depurar, leete todas las posibilidades de depuración que existen en Android y podrás ver cual es la Excepción (o el Error, que es muchísimo más grave, pero también menos común, y casi siempre por usar una API incorrecta o por fallos de memoria) que se produce al llegar a esa línea:

http://developer.android.com/guide/developing/debugging/index.html

De todos los métodos yo uso el "adb logcat" desde la línea de comandos, también es bastante bueno en las fases iniciales ir poniendo marcas de lo que se está ejecutando, usando el Log.d para ir viéndolo en el logcat mientras pruebas la aplicación.

gohan0189
03/04/12, 18:17:58
me manda esto

Could not find class 'org.apache.commons.collections.map.MultiKeyMap', referenced from method net.sf.json.JsonConfig.
Could not find class 'org.apache.commons.collections.map.ListOrderedMap ', referenced from method net.sf.json.JSONObject.

kriogeN
03/04/12, 18:34:53
Tiene toda la pinta que estás usando una librería externa a Android y te faltan otras librerías a la que esa librería hace referencia.

gohan0189
03/04/12, 19:28:53
si de hecho estoy ocupando la libreria json-lib-2.4-jdk15

gohan0189
03/04/12, 19:34:02
y con ella ocupo estas:

commons-beanutils-1.8.3
commons-lang-2.3
commons-lang3-3.1
commons-logging-1.1.1
ezmorph-1.0.6

la q no pongo es :

commons-collections-3.2.1

porque al correr mi app me marca el siguiente error

UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.IllegalArgumentException: already added: Lorg/apache/commons/collections/ArrayStack;
at com.android.dx.dex.file.ClassDefsSection.add(Class DefsSection.java:123)
at com.android.dx.dex.file.DexFile.add(DexFile.java:1 63)
at com.android.dx.command.dexer.Main.processClass(Mai n.java:486)
at com.android.dx.command.dexer.Main.processFileBytes (Main.java:455)
at com.android.dx.command.dexer.Main.access$400(Main. java:67)
at com.android.dx.command.dexer.Main$1.processFileByt es(Main.java:394)
at com.android.dx.cf.direct.ClassPathOpener.processAr chive(ClassPathOpener.java:245)
at com.android.dx.cf.direct.ClassPathOpener.processOn e(ClassPathOpener.java:131)
at com.android.dx.cf.direct.ClassPathOpener.process(C lassPathOpener.java:109)
at com.android.dx.command.dexer.Main.processOne(Main. java:418)
at com.android.dx.command.dexer.Main.processAllFiles( Main.java:329)
at com.android.dx.command.dexer.Main.run(Main.java:20 6)
at com.android.dx.command.dexer.Main.main(Main.java:1 74)
at com.android.dx.command.Main.main(Main.java:95)


tu sabes que puedo hacer??

kriogeN
03/04/12, 20:01:43
Intenta hacerlo todo usando el paquete org.json, que es el que Android soporta de forma oficial.

gohan0189
03/04/12, 21:09:44
pero es q el org.json no tiene unos metodos q ocupo

RubenGM85
05/04/12, 12:17:45
pero es q el org.json no tiene unos metodos q ocupo
¿Has probado Google GSON (http://code.google.com/p/google-gson/)?

Parsear un objeto de tipo "MiClase" desde un String llamado "jsonString" sería tal que así:

MiClase obj = new Gson().fromJson(jsonString, MiClase.class);

osmaga2013
22/08/13, 10:15:45
Hola a todos, soy nuevo en esto del desarrollo de android ya que vengo de tecnología .NET de Microsoft.. y lo veo mas sencillo jajaj todo es empezar.

Bueno, decir que actualmente estoy usando la librería DSON, como dice el compañero Ruben es muy sencilla (por lo poco que he visto). Pero tengo un problema justo en esa línea.
MiClase obj = new Gson().fromJson(jsonString, MiClase.class);[/quote]

Creo que el problema que tengo yo me lo da por la clase MiClase (que yo uso otro nombre).

pongo mi clase a ver si le veis algún defecto,.... por que yo no lo veo :D jajaja


import
com.google.gson.annotations.SerializedName;

public

class PacienteModel
{
@SerializedName("id")
public String id;

@SerializedName("Nombre")
public String _Nombre;

@SerializedName("Apellidos")
public String _Apellidos;

@SerializedName("sexo")
public Integer _Sexo;

}

y lo que hago en código es

Gson gson =

new Gson();
PacienteModel paciente = gson.fromJson(json, PacienteModel.class);

la cadena JSON es correcta {"id":"75247160S","Nombre":"Oscar","Apellidos":null,"sexo":"1"}

Espero que me ayudéis .... :( que estoy estancado.
Gracias de antemano!!! Saludos