Android HTTPGet 语法错误,需要帮助用 GSON 解释它
Android HTTPGet syntax misunderstanding, need help for interpreting it with GSON
我正在尝试创建一个使用我学校 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" 字符串解析为 classes。 FileData 是包含我的请求的完整响应的字符串。不用担心 fileData,我收到的字符串 100% 好,它适用于其他请求。
我告诉 GSON 在 CreateGetProjects 中解析字符串 class。
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 但 BEGIN_ARRAY 在第 1 行第 2 列路径 $.
所以问题可能来自CreateGetProjects.java。我认为它不喜欢这样:
列出回应;
它期待别的东西,我不知道是什么。我试过了,但没有用:
List<List<ResponsesProjects>> responses;
我需要你的帮助来发现 GSON 的期望,我是 GSON 的新手。
你认为我应该替换什么而不是我的列表 "ResponsesProjects"
谢谢。
尝试直接给 GSON 一个 List<ResponsesProjects>
而不是 CreateGetProjects
:第一个确实是一个 list(所以 GSON 会期望一个数组),而第二个是 object 包含一个属性,它是一个列表。
或者您可以在请求响应周围添加 {}
,将其包装到单个 Json 对象中
我正在尝试创建一个使用我学校 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" 字符串解析为 classes。 FileData 是包含我的请求的完整响应的字符串。不用担心 fileData,我收到的字符串 100% 好,它适用于其他请求。
我告诉 GSON 在 CreateGetProjects 中解析字符串 class。
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 但 BEGIN_ARRAY 在第 1 行第 2 列路径 $.
所以问题可能来自CreateGetProjects.java。我认为它不喜欢这样: 列出回应; 它期待别的东西,我不知道是什么。我试过了,但没有用:
List<List<ResponsesProjects>> responses;
我需要你的帮助来发现 GSON 的期望,我是 GSON 的新手。
你认为我应该替换什么而不是我的列表 "ResponsesProjects"
谢谢。
尝试直接给 GSON 一个 List<ResponsesProjects>
而不是 CreateGetProjects
:第一个确实是一个 list(所以 GSON 会期望一个数组),而第二个是 object 包含一个属性,它是一个列表。
或者您可以在请求响应周围添加 {}
,将其包装到单个 Json 对象中