从mysql数据库改进获取Datetime字段将返回null

时间:2015-03-24 19:52:32

标签: android mysql datetime gson retrofit

我正在尝试使用mysql数据库中的Retrofit获取Datetime字段。

这是GsonBuilder和RestAdapter:

        Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();

    RestAdapter restAdapter = new RestAdapter.Builder().
            setEndpoint(MainActivity.baseUrl2).
            setConverter(new GsonConverter(gson)).
            build();

这是我解析JSON的内部类:

   public static class User {

        private String uid;
        private String name;
        private Date birthDate;
        private String username;
        private String path;
        private Date createdAt;
        private Object updatedAt;
        private Map<String, Object> additionalProperties = new HashMap<String, Object>();

.... getters();
..... setters();
}

因此,此系统输出命令将所有日期打印为空:

            final LoginInfo.User userObject = loginInfo.getUser();
            System.out.println(userObject.getCreatedAt() + ", " + userObject.getUid() + ", "
            + userObject.getBirthDate() + ", " + userObject.getUpdatedAt());
  

I / System.out:null,24,null,null

这是返回的JSON:

{
success: 1
unique_id: "54dfb704838680.85365105"
user: {
 uid: "24"
 name: "yy"
 birth_date: "2014-02-15"
 username: "ff"
 path: "http://192.168.1.10/ci2/user_pics/user24.jpg"
 created_at: "2015-02-14 22:58:44"
 updated_at: null
}-
}

1 个答案:

答案 0 :(得分:3)

您的代码设置方式,Gson认为解析它时应该查找字段uidnamebirthDate等等。这不好,因为json中的实际字段是uidnamebirth_date等等。这就是问题所在。

要将json正确映射到您的对象,您应该使用@SerializedName注释,如下所示:

public static class User {
    private String uid;
    private String name;
    @SerializedName("birth_date")
    private Date birthDate;
    // ..
}

我建议你注释你班级的每个领域(甚至那些名称与领域相匹配的领域),因为这样就可以消除重构或Proguard等问题。