【发布时间】:2015-01-21 15:55:49
【问题描述】:
我正在尝试创建一个使用我学校 API 的项目。
首先,这是我从 API 调用 GET 命令时收到的响应:
Get projects
/projects GET
Response
[
{
"title": "Project1",
"num": "1",
"registered": 1,
"type_acti": "Project"
},
{
"title": "Project2",
"num": "2",
"registered": 1,
"type_acti": "Project"
},
{
"title": "Project3",
"num": "3",
"registered": 1,
"type_acti": "Project"
}
]
Gson 自动将我的“fileData”字符串解析为类。 FileData 是包含我的请求的完整响应的字符串。不用担心 fileData,我收到的字符串是 100% 好的,它适用于其他请求。
我告诉 GSON 解析 CreateGetProjects 类中的字符串。
GSONTest.java
public class GSONTest {
public static void start() throws JSONException {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String fileData = NextActivity.getStr();
Log.e("Bug1", "Here it crashes :( ");
CreateGetProjects emp1 = gson.fromJson(fileData, CreateGetProjects.class);
Log.e("Bug1", "After the crash!");
}
}
我这样解释响应:将数据存储到私有成员(标题、注册等)中的“响应项目”列表
CreateGetProjects.java
public class CreateGetProjects {
List<ResponsesProjects> responses;
public List<ResponsesProjects> getResponses() {
return responses;
}
public void setResponses(List<ResponsesProjects> responses) {
this.responses = responses;
}
}
ResponsesProjects.java
public class ResponsesProjects {
private String title;
private String num;
private int registered;
private String type_acti;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getRegistered() {
return registered;
}
public void setRegistered(int registered) {
this.registered= registered;
}
}
我认为我的错误是关于我的 GET 响应的解释。正如您在 logcat 上看到的:
Error.logcat
Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
atcom.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:200)
at com.google.gson.Gson.fromJson(Gson.java:810)
at com.google.gson.Gson.fromJson(Gson.java:775)
at com.google.gson.Gson.fromJson(Gson.java:724)
at com.google.gson.Gson.fromJson(Gson.java:696)
在我看来,有趣的一行是预期为 BEGIN_OBJECT 但在第 1 行第 2 列路径 $ 处为 BEGIN_ARRAY。。
所以问题可能来自 CreateGetProjects.java。我认为它不喜欢这样: 列出响应; 它期待别的东西,我不知道是什么。我试过这个,但不起作用:
List<List<ResponsesProjects>> responses;
我需要您的帮助来了解 GSON 的期望,我是 GSON 的新手。
你认为我应该替换什么而不是我的列表“ResponsesProjects”
谢谢。
【问题讨论】:
-
摆脱你的
CreateGetProjects类,使用List<ResponsesProjects> res = gson.fromJson(fileData, new TypeToken<List<ResponsesProjects>>(){}.getType()); -
这是因为你的json是一个数组,Gson只能反序列化成一个item的列表。
-
感谢您的解释。 brb
-
成功了,非常感谢!!
标签: java android http get gson