2016-05-02 6 views
-1

im nouveau ici et j'ai un problème que je ne peux pas résoudre.Erreur dans Android JsonDeserializer lors de la réponse

im obtenir cette erreur dans le débogage dans le temps d'exécution:

05-02 11:56:07.539 18645-24466/com.appss.appssapp D/Retrofit﹕ java.lang.NullPointerException: Null pointer exception during instruction 'invoke-static {v0, v2}, java.util.ArrayList com.appss.appssapp.io.model.PostsResponse$MainResponse.access$002(com.appss.appssapp.io.model.PostsResponse$MainResponse, java.util.ArrayList) // [email protected]' 
at com.appss.appssapp.io.model.PostsResponse.setPosts(PostsResponse.java:21) 
      at com.appss.appssapp.io.deserializer.PostsResponseDeserializer.deserialize(PostsResponseDeserializer.java:31) 
      at com.appss.appssapp.io.deserializer.PostsResponseDeserializer.deserialize(PostsResponseDeserializer.java:21) 
      at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58) 
      at com.google.gson.Gson.fromJson(Gson.java:810) 
      at com.google.gson.Gson.fromJson(Gson.java:775) 
      at retrofit.converter.GsonConverter.fromBody(GsonConverter.java:63) 
      at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:367) 
      at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220) 
      at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:278) 
      at retrofit.CallbackRunnable.run(CallbackRunnable.java:42) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
      at retrofit.Platform$Android$2$1.run(Platform.java:142) 
      at java.lang.Thread.run(Thread.java:818) 

l'application est compilé correctement, exécutez sans problème, mais quand je fais les appels à l'API ne montre pas les données, i signifie, l'API envoie les données, et je fais ce que j'ai à faire avec, mais quand j'essaie d'envoyer des données à la réponse dans le débogage me montre le problème que j'ai écrit ci-dessus.

ceci est mon code.

Posts.JAVA

public class Posts { 
    String id; //Id de la publicacion 
    String titulo; // Titulo de la publicacion 
    String url; // Url de la publicacion 
    String imagen; // Imagen cover la publicacion 
    String autor_nick; // Nick del autor de la publicacion 
    String visitas; // Lecturas de la publicacion 
    String comentarios; // Cantidad de comentarios de la publicacion 
    public Posts() {} 
    public String getId() { 
     return id; 
    } 
    public void setId(String id) { 
     this.id = id; 
    } 
    public String getTitulo() { 
     return titulo; 
    } 
    public void setTitulo(String titulo) { 
     this.titulo = titulo; 
    } 
    public String getUrl() { 
     return url; 
    } 
    public void setUrl(String url) { 
     this.url = url; 
    } 
    public String getImagen() { 
     return imagen; 
    } 
    public void setImagen(String imagen) { 
     this.imagen = imagen; 
    } 
    public String getAutor_nick() { 
     return autor_nick; 
    } 
    public void setAutor_nick(String autor_nick) { 
     this.autor_nick = autor_nick; 
    } 
    public String getVisitas() { 
     return visitas; 
    } 
    public void setVisitas(String visitas) { 
     this.visitas = visitas; 
    } 
    public String getComentarios() { 
     return comentarios; 
    } 
    public void setComentarios(String comentarios) { 
     this.comentarios = comentarios; 
    } 
} 

PostsResponse.JAVA

public class PostsResponse { 

    private MainResponse mainResponse; 

    public ArrayList<Posts> getPosts(){ 
     return mainResponse.posts; 
    } 

    public void setPosts(ArrayList<Posts> posts) { 
     mainResponse.posts = posts; 
    } 

    private class MainResponse { 

     private ArrayList<Posts> posts; 

    } 
} 

PostResponseDeserializer.JAVA

public class PostsResponseDeserializer implements JsonDeserializer<PostsResponse> { 
    @Override 
    public PostsResponse deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { 
     Gson gson = new Gson(); 
     PostsResponse response = gson.fromJson(json, PostsResponse.class); 

     JsonObject postsResponseData = json.getAsJsonObject(); 

     JsonArray postsArray = postsResponseData.getAsJsonArray("posts"); 

     response.setPosts(extractPostsFromJsonArray(postsArray)); 

     return response; 
    } 

    private ArrayList<Posts> extractPostsFromJsonArray(JsonArray postsArray) { 
     ArrayList<Posts> posts = new ArrayList<>(); 
     for (int i = 0; i < postsArray.size(); i++) { 

      JsonObject postsDatos = postsArray.get(i).getAsJsonObject(); 

      Posts actualPost = new Posts(); 
      String titulo = postsDatos.get("titulo").getAsString(); 
      String imagen = postsDatos.get("imagen_370x208").getAsString(); 
      String visitas = postsDatos.get("visitas").getAsString(); 

      actualPost.setTitulo(titulo); 
      actualPost.setImagen(imagen); 
      actualPost.setVisitas(visitas); 

      posts.add(actualPost); 
     } 
     return posts; 
    } 
} 

Je pense que le problème pourrait être ici response.setPosts (extractPostsFromJsonArray (postsArray));

mais je n'arrive pas à comprendre pourquoi cela se produit.

Une aide? .. Et désolé pour mon mauvais anglais.

Répondre

0

Je ne suis pas sûr mais vérifiez ceci. Lorsque vous appelez la méthode setposts, elle essaie d'initialiser une liste de choix alors que l'objet qui contient la liste n'est pas initialisé. Donc, vous devriez d'abord créer une instance de MainResponse.

+0

Je suis nouveau dans android et Java. les réponses que vous m'avez données ont résolu mon problème. Merci beaucoup! –