​ 例如在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类型的数据输出。