改造从 mysql 数据库 returns 获取日期时间字段 null
Retrofit getting Datetime field from mysql database returns null
我正在尝试使用 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();
这是我的内部 class 解析了 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 认为在解析时应该查找字段 uid
、name
、birthDate
等。这不好,因为 json 中的实际字段是 uid
、name
、birth_date
等。这就是问题所在。
要正确地将 json 映射到您的对象,您应该像这样使用 @SerializedName
注释:
public static class User {
private String uid;
private String name;
@SerializedName("birth_date")
private Date birthDate;
// ..
}
我建议您注释 class 的每个字段(即使是那些名称与字段匹配的字段),因为这样可以消除重构或 Proguard 等问题。
我正在尝试使用 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();
这是我的内部 class 解析了 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 认为在解析时应该查找字段 uid
、name
、birthDate
等。这不好,因为 json 中的实际字段是 uid
、name
、birth_date
等。这就是问题所在。
要正确地将 json 映射到您的对象,您应该像这样使用 @SerializedName
注释:
public static class User {
private String uid;
private String name;
@SerializedName("birth_date")
private Date birthDate;
// ..
}
我建议您注释 class 的每个字段(即使是那些名称与字段匹配的字段),因为这样可以消除重构或 Proguard 等问题。