[Android] web service error Gson parser[Solucionado]

Iniciado por kondrag_X1, 28 Octubre 2015, 16:16 PM

0 Miembros y 1 Visitante están viendo este tema.

kondrag_X1

Hola,

Estoy haciendo un servicio web y me encuentro trabajando con la librería Volley, la verdad que simplifica muchísimo la cosa para trabajar con webservices, pero tengo un error que he conseguido acotarlo a las siguientes líneas.

Cuando lanzo la consulta y el Json responde atiendo la respuesta con un método que todo va correcto hasta el punto donde tengo que extraer los datos con gson.fromJson

El método
Código (java) [Seleccionar]

private void procesarRespuesta(JSONObject response) {
       try {
           // Obtener atributo "estado"
           String estado = response.getString("estado");

           switch (estado) {
               case "1": // EXITO
                   Log.d(TAG, "respuesta exitosa.");
                   // Obtener "arqueta" Json
                   JSONObject mensaje = response.getJSONObject("arqueta");
                   // Parsear con Gson
                   Log.d(TAG, "ParsearGson mensaje: "+mensaje.toString());
                   BeanArqueta arquetas = gson.fromJson(mensaje.toString(), BeanArqueta.class);
                   //presentar en activity
                   updateDatosActivity(arquetas);
                   break;
               case "2": // FALLIDO
                   Log.d(TAG, "respuesta fallida.");
                   String mensaje2 = response.getString("mensaje");
                   Toast.makeText(
                           this,
                           mensaje2,
                           Toast.LENGTH_LONG).show();
                   break;
               default:
                   Log.d(TAG, "respuesta error estado:"+estado);
                   break;
           }
       } catch (JSONException e) {
           e.printStackTrace();
       }
   }

el contenido de JSon devuelto es correcto:

{"estado":1,"arqueta":{"id":"1","insert_time":"2015-10-27 08:40:27","nombre_arqueta":"Arqueta","direccion_arqueta":"74:48:52:44","uuid_sensor1":"0001","uuid_sensor2":"0001","uuid_sensor3":"0001"}}


y cuando queremos obtener el contenido del mensaje como se puede ver en el objeto
JSONObject mensaje es: correcto

{"id":"1","insert_time":"2015-10-27 08:40:27","nombre_arqueta":"Arqueta","direccion_arqueta":"74:48:52:44","uuid_sensor1":"0001","uuid_sensor2":"0001","uuid_sensor3":"0001"}


y cuando llega a
Código (java) [Seleccionar]

  BeanArqueta arquetas = gson.fromJson(mensaje.toString(), BeanArqueta.class);


salta una excepción en la documentación dice que es porque el objeto que se intenta pasear no correspondo con el objeto Json.

pero como se puede ver el Json contiene los mismos campos que el objeto BeanArqueta

BeanArqueta
Código (java) [Seleccionar]

public class BeanArqueta
{
   private static String id;
   private static String insert_time;
   private static String nombre_arqueta;
   private static String direccion_arqueta;
   private static String uuid_sensor1;
   private static String uuid_sensor2;
   private static String uuid_sensor3;

   public BeanArqueta()
   {
       super();
   }

   public static String getId() {
       return id;
   }

   public static void setId(String id) {
       BeanArqueta.id = id;
   }

   public static String getInsert_time() {
       return insert_time;
   }

   public static void setInsert_time(String insert_time) {
       BeanArqueta.insert_time = insert_time;
   }

   public static String getNombre_arqueta() {
       return nombre_arqueta;
   }

   public static void setNombre_arqueta(String nombre_arqueta) {
       BeanArqueta.nombre_arqueta = nombre_arqueta;
   }

   public static String getDireccion_arqueta() {
       return direccion_arqueta;
   }

   public static void setDireccion_arqueta(String direccion_arqueta) {
       BeanArqueta.direccion_arqueta = direccion_arqueta;
   }

   public static String getUuid_sensor1() {
       return uuid_sensor1;
   }

   public static void setUuid_sensor1(String uuid_sensor1) {
       BeanArqueta.uuid_sensor1 = uuid_sensor1;
   }

   public static String getUuid_sensor2() {
       return uuid_sensor2;
   }

   public static void setUuid_sensor2(String uuid_sensor2) {
       BeanArqueta.uuid_sensor2 = uuid_sensor2;
   }

   public static String getUuid_sensor3() {
       return uuid_sensor3;
   }

   public static void setUuid_sensor3(String uuid_sensor3) {
       BeanArqueta.uuid_sensor3 = uuid_sensor3;
   }
}


A qué se debe el error? no lo entiendo si el objeto Bean tienes los mismos campos que el mensaje.

kondrag_X1

tengo la mala costumbre de hacer las variables estáticas y el gson no las acepta.cambiando esto se ha solucionado dejo constancia por si algún otro le ocurre lo mismo.
Código (java) [Seleccionar]

public class BeanArqueta
{
   private String id;
   private String insert_time;
   private String nombre_arqueta;
   private String direccion_arqueta;
   private String uuid_sensor1;
   private String uuid_sensor2;
   private String uuid_sensor3;

   public BeanArqueta()
   {
       super();
   }

   public static String getId() {
       return id;
   }

   public void setId(String id) {
       BeanArqueta.id = id;
   }

   public String getInsert_time() {
       return insert_time;
   }

   public void setInsert_time(String insert_time) {
       BeanArqueta.insert_time = insert_time;
   }

   public String getNombre_arqueta() {
       return nombre_arqueta;
   }

   public void setNombre_arqueta(String nombre_arqueta) {
       BeanArqueta.nombre_arqueta = nombre_arqueta;
   }

   public String getDireccion_arqueta() {
       return direccion_arqueta;
   }

   public void setDireccion_arqueta(String direccion_arqueta) {
       BeanArqueta.direccion_arqueta = direccion_arqueta;
   }

   public String getUuid_sensor1() {
       return uuid_sensor1;
   }

   public void setUuid_sensor1(String uuid_sensor1) {
       BeanArqueta.uuid_sensor1 = uuid_sensor1;
   }

   public String getUuid_sensor2() {
       return uuid_sensor2;
   }

   public void setUuid_sensor2(String uuid_sensor2) {
       BeanArqueta.uuid_sensor2 = uuid_sensor2;
   }

   public String getUuid_sensor3() {
       return uuid_sensor3;
   }

   public void setUuid_sensor3(String uuid_sensor3) {
       BeanArqueta.uuid_sensor3 = uuid_sensor3;
   }
}