在返回响应时的错误在Android中JsonDeserializer [英] Error in Android JsonDeserializer when returning response
问题描述
即时通讯新这里,我有一个问题,我解决不了。
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屋!