Análisis de JSON con Retrofit

Comencé a usar Retrofit recientemente. No sé mucho de eso. He googled este problema y no hay respuestas suite mi problema.

Esta es la respuesta JSON

{ "results": [ { "description_eng": "This is second time testing", "img_url": "-", "title_eng": "Second test" }, { "description_eng": "Hello 1 2 3, I am testing.", "img_url": "https://fbcdn-sphotos-fa.akamaihd.net/hphotos-ak-xpa1/t31.0-8/s720x720/10838273_816509855058935_6428556113200361121_o.jpg", "title_eng": "Test" } ] } 

Esta es la clase de alimentación

 public class Feed { public List<Results> results; class Results{ String description_eng,img_url,title_eng; } } 

Esta es la interfaz

 public interface GetApi { @GET("/api.json") public void getData(Callback<List<Feed>> response); } 

Tengo json_illegal_syntax Exception .

Así es como resolví este problema.

Clase de alimentación

 public class Feed{ private List<Result> results; public Feed(){ } public List<Result> getFeed(){ return this.results; } public void setFeed(List<Result> results) { this.results = results; } } 

Clase de resultado

 public class Result{ private String description_eng; private String img_url; private String title_eng; public Result(){} //getters and setters } 

GetApi.class

 public interface GetApi { @GET("/api.json") public void getData(Callback<Feed> response); } 

Gracias por responder a bros. :RE

Retrofit utiliza Gson por defecto para convertir cuerpos HTTP hacia y desde JSON. Si desea especificar un comportamiento que sea diferente de los valores predeterminados de Gson (por ejemplo, políticas de nomenclatura, formatos de fecha, tipos personalizados), proporcione una nueva instancia de Gson con el comportamiento deseado al crear un RestAdapter.

Gson no puede deserializar automáticamente las clases internas puras ya que su constructor no-args también necesita una referencia al objeto que contiene que no está disponible en el momento de la deserialización. Puede resolver este problema ya sea haciendo la clase interna estática o proporcionando un InstanceCreator personalizado para ello. Aquí hay un ejemplo:

 public class A { public String a; class B { public String b; public B() { // No args constructor for B } } } 

NOTA: La clase B anterior no puede (por defecto) ser serializada con Gson.

Debe leer más acerca de la biblioteca GSON

@Ye Min Htut En realidad, incluso mejor es escribir la clase Feed con genéricos.

 public class FeedList<T>{ private List<T> feeds; public Feed() { } public List<T> getFeed(){ return this.feeds; } public void setFeed(List<T> results) { this.feeds = feeds; } } 

y si hay algo similar con sólo un objeto, que puede quitar parte de la lista y obtener / establecer un solo objeto.

Ahora puede llamar a FeedList<Result> o con cualquier objeto que desee.

GetApi.class

 public interface GetApi { @GET("/api.json") public void getData(Callback<FeedList<Result>> response); } 
  • Rx java retrofit 2 manejo de errores
  • Encadenamiento de dos llamadas de servicio web mediante RxJava y Retrofit
  • Android rxJava Manejo de errores con retroadaptación
  • Prueba de respuestas reales de red con retroadaptación
  • Retrofit 2 RxJava - Gson - Deserialización "Global", tipo respuesta de cambio
  • Subir varias imágenes al servidor en una cola
  • Descargar vídeo de Url con Retrofit
  • Desmontaje de desmontaje de Retrofit + GSON
  • Renovación de la referencia $ ref de objeto deserializante de JSON a su copia original
  • No se puede crear un conversor para mi clase en Android Retrofit2 converter-simplexml library
  • RxJava: ¿Cómo reanudar el trabajo de un observable si se produce un cambio de configuración?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.