Android 改装和房间模型互操作性
我正试图开发一个Android应用程序,通过改造使用RESTAPI,并将收到的结果缓存在房间数据库中。我计划实现这种行为的方式是让Room创建的本地数据库作为我的SSoT(单一真相来源),通过我的存储库为我的数据提供信息 当我尝试为单个用户实体(我的一个模型)实现房间配置和行为时,我的问题就出现了。此数据库实体包含与改型用户模型(id、用户名、电子邮件、说明)完全相同的原子信息,并且不包含服务器响应或照片URL字段。现在,当我有两个模型,需要在存储库中创建一个方法来返回一个LiveData实例时,我不知道如何在不手动转换它们的情况下适应这两种类型(因为有一次我会从改装请求中检索一个用户模型并更新房间数据库,该数据库采用UserEntity参数,但另一次我可能只是从缓存中获取用户数据) 我想知道是否有任何方法可以简单地为改造和房间操作使用一个模型,或者是否需要手动将改造服务器响应模型转换为房间数据库实体。是否不可能在m中同时使用@SerializedName和@ColumnInfo注释odel(如果需要其他模型,请使用@Ignore来腾出空间忽略不必要的字段)?或者这只会混淆整个模型并使其无法使用 代码摘录以进一步了解: UserEntity.java(房间模型) User.java(改装响应)Android 改装和房间模型互操作性,android,mvvm,model,retrofit2,android-room,Android,Mvvm,Model,Retrofit2,Android Room,我正试图开发一个Android应用程序,通过改造使用RESTAPI,并将收到的结果缓存在房间数据库中。我计划实现这种行为的方式是让Room创建的本地数据库作为我的SSoT(单一真相来源),通过我的存储库为我的数据提供信息 当我尝试为单个用户实体(我的一个模型)实现房间配置和行为时,我的问题就出现了。此数据库实体包含与改型用户模型(id、用户名、电子邮件、说明)完全相同的原子信息,并且不包含服务器响应或照片URL字段。现在,当我有两个模型,需要在存储库中创建一个方法来返回一个LiveData实例时
提前感谢您!@我们使用实体元数据在数据库中创建一个映射SQLite表,该表是使用文件室创建的。但是,它是一个data/POJO类,可以在使用Gson将JSON解析为POJO时使用 然后可以将相同的POJO类插入到数据库表中
@Entity(tableName = "users")
public class UserEntity {
@PrimaryKey
@NonNull
private int id; // id is fetched from network response - not autogenerated
@ColumnInfo(name = "username")
private String username;
@ColumnInfo(name = "description")
private String description;
@ColumnInfo(name = "email")
private String email;
public UserEntity(int id, String username, String description, String email) {
this.id = id;
this.username = username;
this.description = description;
this.email = email;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
public class User extends Model implements Parcelable {
@SerializedName("id")
@Expose
@Nullable
private Integer id;
@SerializedName("username")
@Expose
@Nullable
private String username;
@SerializedName("description")
@Expose
@Nullable
private String description;
@SerializedName("email")
@Expose
@Nullable
private String email;
@SerializedName("photo_url")
@Expose
@Nullable
private String photoUrl;
// constructors, getters & setters, & implementations. . .
}