在返回响应时的​​错误在Android中JsonDeserializer [英] Error in Android JsonDeserializer when returning response

查看:320
本文介绍了在返回响应时的​​错误在Android中JsonDeserializer的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

即时通讯新这里,我有一个问题,我解决不了。

im new here and i have a problem i can not solve.

即时得到这个错误在调试中的执行时间:

im getting this error in the debug in execution time:

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) // method@19256'
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)

应用程序被编译正确,没有问题,运行,但是当我打的电话的API不显示数据,我的意思是,API发送的数据,我做我都用它做,但是当我尝试去数据发送到在调试的反应表明我,我上面写了这个问题。

the app is compiled correctly, run without a problem, but when i make the calls to the api doesn't show the data, i mean, the api send the data, and i do what i have to do with it, but when i try to send de data to the response in the debug shows me the problem i wrote up above.

这是我的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;
    }
}

我想问题可能会在这里
response.setPosts(extractPostsFromJsonArray(postsArray));

但我想不通为什么会这样。

but i can't figure out why is this happening.

任何帮助吗? ..和我的英语不好对不起。

Any help? .. And sorry for my bad english.

推荐答案

我不知道,但检查。

当你调用setposts方法,它会尝试而包含列表中的对象没有初始化初始化一个ArrayList。所以,你应该第一个新MainResponse的一个实例。

When you call setposts method it will try to initialize an arraylist while the object that contains the list is not initialized. So you should new an instance of MainResponse first.

这篇关于在返回响应时的​​错误在Android中JsonDeserializer的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆