我正在尝试创建一个使用我学校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类中的String。
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!");
}
}
我用这种方式解释了响应:列表" ResponsesProjects"将数据存储到私有成员(标题,已注册等)
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的新手。
您认为应该替换我的List&#34; ResponsesProjects&#34;
感谢。
答案 0 :(得分:0)
尝试直接给GSON一个List<ResponsesProjects>
而不是CreateGetProjects
:第一个真的是列表(所以GSON会期望一个数组),而第二个是 object 包含单个属性,即列表。
或者您可以在请求响应周围添加{}
,将其包装到单个Json对象中