Android HTTPGet语法误解,需要帮助用GSON解释它

时间:2015-01-21 15:55:50

标签: java android http get 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"字符串到类。 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;

感谢。

1 个答案:

答案 0 :(得分:0)

尝试直接给GSON一个List<ResponsesProjects>而不是CreateGetProjects:第一个真的是列表(所以GSON会期望一个数组),而第二个是 object 包含单个属性,即列表。

或者您可以在请求响应周围添加{},将其包装到单个Json对象中