无法改造和Gson从deployd提取数据

时间:2016-10-13 12:54:13

标签: android gson retrofit2

我是Android开发的新手。我有我的这个小项目,我需要通过访问我在我的mac上使用deployd本地创建的API来开始工作。 api可从localhost:2403 / subject访问。我已经关注了改造和gson指南,但到目前为止我只保留错误,没有任何可行的工作。此时我有点卡住了。我需要从api获取主题并将它们显示在可滚动的列表中。

我已经设置了Retrofit和Gson以便能够与API通信。因此我制作了一些类和接口。

首先是主题类

Name____#___#___#__              _____________________
acari | 1 | 2 | 3 |              |__A__|__B__|__C__|__  ...
angle | 1 | 2 | 3 |              |     |______________
arhat | 1 | 2 | 3 |              |Name_|_#_|_#_|_#_
akkra | 1 | 2 | 3 |              |
amiel | 1 | 2 | 3 |     TO       |acari| 1 | 2 | 3 |
barce | 1 | 2 | 3 |              |angle| 1 | 2 | 3 |
bogie | 1 | 2 | 3 |              |arhat| 1 | 2 | 3 |
betty | 1 | 2 | 3 |              |akkra| 1 | 2 | 3 |
brill | 1 | 2 | 3 |              |amiel| 1 | 2 | 3 |
blyth | 1 | 2 | 3 |              |

然后我创建了一个HslSubjects类,它很简单,可以容纳我得到的所有主题。

public class Subject {

    int id;
    String name;
    int ects;
    int grade;
    int period;
    int main;

    public int getMain() {
        return main;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getEcts() {
        return ects;
    }

    public int getGrade() {
        return grade;
    }

    public int getPeriod() {
        return period;
    }

}

和api接口

public class HslSubjects {
    List<Subject> subjects;
}

后跟适配器

public interface subjectEndpointApi {
    @GET("/subjects")
    Call<HslSubjects> loadSubjects();
}

最后在我的mainActivity中运行所有内容

public class SubjectResponse {

    @SerializedName("subjects")
    List<Subject> subjects;

    public SubjectResponse() {
        subjects = new ArrayList<Subject>();
    }

    public static SubjectResponse parseJSON(String response) {
        Gson gson = new GsonBuilder().create();
        SubjectResponse subjectResponse = gson.fromJson(response,    SubjectResponse.class);
        return subjectResponse;
    }
}

但不知何故,它总是进入onFailure类。模拟器出现以下错误:

enter image description here

1 个答案:

答案 0 :(得分:0)

似乎您的服务器JSON不是您在设备上所期望的。 错误说android想要JSON 对象,但你传递的json有点数组

尝试添加日志记录,看看那里有什么问题。

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

所以我想你应该写一些类似的东西:

public interface subjectEndpointApi {
    @GET("/subjects")
    Call<List<Subject>> loadSubjects();
}