Android - 使用 GSON returns 空值列表的 Volley
Android - Volley with GSON returns null list of values
我正在尝试做一个简单的 Volley+GSON 应用程序,只是从 JSON 在线文件中提取数据
JSON
{
"tag": [
{
"id": "5",
"name": "1"
},
{
"id": "5",
"name": "1"
}
]
}
我做了一个class作为模型
public class obj {
private String id;
private String name;
public int getId() {
return id;
}
public String getName() {
return name;
}
}
还有这个class
public class objArray {
public ArrayList<obj> results;
public ArrayList<obj> getResults() {
return results;
}
}
然后我提出了这个要求
GsonRequest<objArray> jsObjRequest = new GsonRequest<objArray>(
Request.Method.GET,
_LINK,
objArray.class, null,
createSuccessListener(),
createErrorListener());
所以当我尝试像这样操作输出时
response.getObjs().get(0).getName();
我得到一个空异常,似乎 response.getObjs() returns 为空,响应本身不为空,只是其中的数组,我该如何解决这个问题?问题可能出在 JSON 或 GsonRequest class 中吗?
这是我在 GsonRequest class:
中获得响应的方式
return Response.success(gson.fromJson(json,clazz),HttpHeaderParser.parseCacheHeaders(response));
编辑:感谢@njzk2,我得以更正此问题,问题出在 objArray class,保存数组的变量称为 "results",其中没有元素或数组JSON 文件名为 results,这就是使值为 null 的原因,我在 JSON 文件中的数组被称为 "tag",因此该变量应该被命名为 "tag".
public ArrayList<Tag> tag;
请注意,这个问题并不是因为缺少构造函数或 setter,正如@tinysunlight 所说,我没有添加它们,应用程序仍然按预期工作。
return Response.success(gson.fromJson(new JSONObject(json).getString("tag"),clazz),HttpHeaderParser.parseCacheHeaders(response));
gson要求
模态应该有一个空的构造函数和所有 getter 和 setter:
public class obj {
private String id;
private String name;
public obj(){}
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setId(String id) {
this.id = id;
}
public void setName(String name) {
this.name= name;
}
}
我正在尝试做一个简单的 Volley+GSON 应用程序,只是从 JSON 在线文件中提取数据
JSON
{
"tag": [
{
"id": "5",
"name": "1"
},
{
"id": "5",
"name": "1"
}
]
}
我做了一个class作为模型
public class obj {
private String id;
private String name;
public int getId() {
return id;
}
public String getName() {
return name;
}
}
还有这个class
public class objArray {
public ArrayList<obj> results;
public ArrayList<obj> getResults() {
return results;
}
}
然后我提出了这个要求
GsonRequest<objArray> jsObjRequest = new GsonRequest<objArray>(
Request.Method.GET,
_LINK,
objArray.class, null,
createSuccessListener(),
createErrorListener());
所以当我尝试像这样操作输出时
response.getObjs().get(0).getName();
我得到一个空异常,似乎 response.getObjs() returns 为空,响应本身不为空,只是其中的数组,我该如何解决这个问题?问题可能出在 JSON 或 GsonRequest class 中吗? 这是我在 GsonRequest class:
中获得响应的方式return Response.success(gson.fromJson(json,clazz),HttpHeaderParser.parseCacheHeaders(response));
编辑:感谢@njzk2,我得以更正此问题,问题出在 objArray class,保存数组的变量称为 "results",其中没有元素或数组JSON 文件名为 results,这就是使值为 null 的原因,我在 JSON 文件中的数组被称为 "tag",因此该变量应该被命名为 "tag".
public ArrayList<Tag> tag;
请注意,这个问题并不是因为缺少构造函数或 setter,正如@tinysunlight 所说,我没有添加它们,应用程序仍然按预期工作。
return Response.success(gson.fromJson(new JSONObject(json).getString("tag"),clazz),HttpHeaderParser.parseCacheHeaders(response));
gson要求 模态应该有一个空的构造函数和所有 getter 和 setter:
public class obj {
private String id;
private String name;
public obj(){}
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setId(String id) {
this.id = id;
}
public void setName(String name) {
this.name= name;
}
}