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 对象中