Jackson ObjectMapper Definiciones de definiciones conflictivas (Android.Graphics.Bitmap)

Tengo este método:

public static Response deserializeResponse(String jsonResponse) throws JsonParseException, JsonMappingException, IOException { ObjectMapper mapper = new ObjectMapper(); try{ return mapper.readValue(jsonResponse, Response.class); }catch(JsonParseException e){ e.printStackTrace(); }catch(JsonMappingException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } return null; } 

Aquí está la clase Respuesta:

 public static class Response { public String RequestType; public Data data; public void SetRequestType(String requestType) { this.RequestType = requestType; } @JsonIgnore @JsonProperty("data") public void SetData(Data data) { this.data = data; } public Response(){ data = new Data(); } public static class Data { public String Status; public String ErrorCode; public int versionCode; public String Expiry; public String ProductSKU; public String Email; public String Birthday; public String PictureUrl; public String Pin; public List<PhoneNumber> Numbers = new ArrayList<PhoneNumber>(); public int IdTransaction; public int SubProductId; public List<Performer> Performers = new ArrayList<Performer>(); public Client Client; public Data() {} } } 

Esta es la llamada de otra clase:

 Response rep = JsonOperation.deserializeResponse(jsonString); 

Ejecutar este código en un dispositivo que utiliza android 2.3.6 y todo funciona perfecto. Cuando ejecuto este código en mi Galaxy Note 3 o S4, tengo varios errores. Aquí está el registro:

 W/System.err﹕ com.fasterxml.jackson.databind.JsonMappingException: Conflicting setter definitions for property "imagePath": android.graphics.Bitmap#setImagePath(1 params) vs android.graphics.Bitmap#setImagePath(1 params) 03-21 15:51:54.373 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:269) 03-21 15:51:54.373 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244) 03-21 15:51:54.373 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:143) 03-21 15:51:54.373 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:325) 03-21 15:51:54.373 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:633) 03-21 15:51:54.373 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:427) 03-21 15:51:54.373 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:295) 03-21 15:51:54.373 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244) 03-21 15:51:54.373 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:143) 03-21 15:51:54.373 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:325) 03-21 15:51:54.373 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:147) 03-21 15:51:54.373 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:23) 03-21 15:51:54.373 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:329) 03-21 15:51:54.373 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:633) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:427) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:295) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:143) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:325) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:633) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:427) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:295) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:143) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:342) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:2895) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2789) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1943) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.francovoyance.JsonOperation.deserializeResponse(JsonOperation.java:321) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.francovoyance.HttpOperation$HttpPostRequest.doInBackground(HttpOperation.java:125) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.francovoyance.HttpOperation$HttpPostRequest.doInBackground(HttpOperation.java:69) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:287) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:234) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at java.lang.Thread.run(Thread.java:841) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ Caused by: java.lang.IllegalArgumentException: Conflicting setter definitions for property "imagePath": android.graphics.Bitmap#setImagePath(1 params) vs android.graphics.Bitmap#setImagePath(1 params) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.getSetter(POJOPropertyBuilder.java:196) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.filterBeanProps(BeanDeserializerFactory.java:614) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.addBeanProps(BeanDeserializerFactory.java:522) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:267) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:171) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:388) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264) 03-21 15:51:54.383 15204-15218/com.francovoyance W/System.err﹕ ... 36 more 

Aquí está la entrada de Json desde el servidor:

 private string CheckVersion(JObject jsonObject) { StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); using (JsonWriter writer = new JsonTextWriter(sw)) { writer.Formatting = Formatting.Indented; writer.WriteStartObject(); writer.WritePropertyName("RequestType"); writer.WriteValue("CheckVersion"); writer.WritePropertyName("data"); writer.WriteStartObject(); writer.WritePropertyName("Status"); string inVersion = (string)jsonObject["data"]["versionCode"]; string actualVersion = WebTV.Common.AppSettings.GetString("APP_VERSION", "1"); actualVersion = Convert.ToString((int)Convert.ToDouble(actualVersion)); if (inVersion.Equals(actualVersion)) { writer.WriteValue("Ok"); } else { writer.WriteValue("Error"); writer.WritePropertyName("versionCode"); writer.WriteRawValue(actualVersion); } writer.WriteEndObject(); } return sb.ToString(); } 

Busqué y traté de encontrar respuestas a este problema, pero no encontré nada acerca de los setters en android.graphics.Bitmap … He intentado usar @JsonIgnore sin ningún resultado. Necesito ayuda para resolver la excepción cuando intento utilizar el asignador. Cualquier ayuda sería apreciada.

Acabo de solucionar este problema (para mí), aunque se siente más de una solución para estos dispositivos Samsung. Me doy cuenta de que mencionaste que probaste la anotación de @JsonIgnore, pero logró resolver mi problema.

En mi modelo, sólo estaba mapeando el JSON a un pequeño subconjunto de mi modelo base. En este modelo base sin embargo, tenía una lista de otro modelo de objeto que contenía un mapa de bits. Al agregar @JsonIgnore a la lista de modelos, el problema se resolvió (aunque no estaba mapeando a ellos y deberían haber sido ignorados).

Había estado utilizando una característica de ObjectMapper para ignorar valores no utilizados, pero no funcionó en los dispositivos de Samsung.

 ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); 

En el ejemplo siguiente, mi objeto de perfil contiene un mapa de bits, y sólo estoy asignando el nombre y la edad con el JSON.

Ejemplo:

 public class A { private String name; private int age; @JsonIgnore private List<Profile> profiles; } 

Si tuviera que hacer una suposición salvaje, diría que su objeto Performer anterior contiene un mapa de bits, y si no está mapeando a eso, entonces wouldd tratar de ignorar la lista.

  • Cómo analizar JSON en Android
  • Gson - Igual nombre de campo, diferentes tipos
  • Cómo comprimir un JSONObject enviarlo sobre Http en Android?
  • Retrofit 2: Obtener el cuerpo de JSON from Response
  • Retrofit 2.0 Convertor devuelve NULL
  • Cómo convertir una cadena en unicode en android
  • Excepción no manipulada org.json.jsonexception
  • Crear un JSONArray
  • ¿Cómo obtengo diferencias entre dos objetos json usando GSON?
  • Cómo utilizar parámetros con HttpPost
  • Conversión de cadena a json objeto android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.