例如在LoginInfo类中有一个Data数据需要保存到room数据库中。
public static class Data implements Serializable {
@PrimaryKey(autoGenerate = true) private int rowId;
private String token;
private Role[] roles;
private User user;
public int getRowId() { return rowId; }
public void setRowId(int rowId) { this.rowId = rowId; }
public Data() { rowId = 1; }
public String getToken() { return token; }
public void setToken(String token) { this.token = token; }
public Role[] getRoles() { return roles; }
public void setRoles(Role[] roles) { this.roles = roles; }
public User getUser() { return user; }
public void setUser(User user) { this.user = user; }
public static class Role implements Serializable { private String name; private String display_name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getDisplay_name() { return display_name; }
public void setDisplay_name(String display_name) { this.display_name = display_name; } }
public static class User implements Serializable {
private String name;
private String realName;
private String staffNo;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getRealName() { return realName; }
public void setRealName(String realName) { this.realName = realName; }
public String getStaffNo() { return staffNo; }
public void setStaffNo(String staffNo) { this.staffNo = staffNo; } } }
|
此时不能将其直接保存到room中,而是应该添加一个转换器,将数据转换成String形式保存。
public class UserInfoConverter { @TypeConverter public String objectToString(LoginInfo.Data.Role[] list) { return GsonInstance.getInstance().getGson().toJson(list); }
@TypeConverter public LoginInfo.Data.Role[] stringToRole(String json) { Type listType = new TypeToken<LoginInfo.Data.Role[]>() { }.getType(); return GsonInstance.getInstance().getGson().fromJson(json, listType); }
@TypeConverter public String objectToString(LoginInfo.Data.User list) { return GsonInstance.getInstance().getGson().toJson(list); }
@TypeConverter public LoginInfo.Data.User stringToUser(String json) { Type listType = new TypeToken<LoginInfo.Data.User>() { }.getType(); return GsonInstance.getInstance().getGson().fromJson(json, listType); } }
|
其中GsonInstance即为Gson的单例类。
然后在model的Data前添加@TypeConverters(UserInfoConverter.class),就可以让room在存入数据的时候自动将object类型的数据转换成String类型的数据保存起来,在取出的时候也会自动将String数据转换成对应的Object类型的数据输出。