android - 改造从 mysql 数据库获取日期时间字段返回 null

标签 android mysql datetime gson retrofit

我正在尝试使用 Retrofit 从 mysql 数据库中获取日期时间字段。

这是 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
}-
}

最佳答案

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

要正确地将 json 映射到您的对象,您应该像这样使用 @SerializedName 注释:

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

我建议您注释类的每个字段(即使是那些名称与字段匹配的字段),因为这样可以消除重构或 Proguard 等问题。

关于android - 改造从 mysql 数据库获取日期时间字段返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29241630/

相关文章:

android - 没有这些限制的手机应用程序 API

java - Android Studio ArrayAdapter 要求资源 ID 为 TextView

android - Gradle构建错误:输入重复

mysql - 将两行合并为一行 - 肮脏且缓慢的过程

php - Mysql:如何将多行连接成具有不同字段名称的单行?

mysql - 截断不正确的日期时间值 mysql

php - 如何在 Laravel (PHP) 中从今天开始获得 10 天的 future 日期

java - 无法打开安卓工作室。 (JDK相关问题)

mysql - 如何在MySQL中获取每月的数据

c# - 在 C# 中计算自 1970 年以来的毫秒数产生与 JavaScript 不同的日期