Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 改装和房间模型互操作性_Android_Mvvm_Model_Retrofit2_Android Room - Fatal编程技术网

Android 改装和房间模型互操作性

Android 改装和房间模型互操作性,android,mvvm,model,retrofit2,android-room,Android,Mvvm,Model,Retrofit2,Android Room,我正试图开发一个Android应用程序,通过改造使用RESTAPI,并将收到的结果缓存在房间数据库中。我计划实现这种行为的方式是让Room创建的本地数据库作为我的SSoT(单一真相来源),通过我的存储库为我的数据提供信息 当我尝试为单个用户实体(我的一个模型)实现房间配置和行为时,我的问题就出现了。此数据库实体包含与改型用户模型(id、用户名、电子邮件、说明)完全相同的原子信息,并且不包含服务器响应或照片URL字段。现在,当我有两个模型,需要在存储库中创建一个方法来返回一个LiveData实例时

我正试图开发一个Android应用程序,通过改造使用RESTAPI,并将收到的结果缓存在房间数据库中。我计划实现这种行为的方式是让Room创建的本地数据库作为我的SSoT(单一真相来源),通过我的存储库为我的数据提供信息

当我尝试为单个用户实体(我的一个模型)实现房间配置和行为时,我的问题就出现了。此数据库实体包含与改型用户模型(id、用户名、电子邮件、说明)完全相同的原子信息,并且不包含服务器响应或照片URL字段。现在,当我有两个模型,需要在存储库中创建一个方法来返回一个LiveData实例时,我不知道如何在不手动转换它们的情况下适应这两种类型(因为有一次我会从改装请求中检索一个用户模型并更新房间数据库,该数据库采用UserEntity参数,但另一次我可能只是从缓存中获取用户数据)

我想知道是否有任何方法可以简单地为改造房间操作使用一个模型,或者是否需要手动将改造服务器响应模型转换为房间数据库实体。是否不可能在m中同时使用@SerializedName@ColumnInfo注释odel(如果需要其他模型,请使用@Ignore来腾出空间忽略不必要的字段)?或者这只会混淆整个模型并使其无法使用

代码摘录以进一步了解:

UserEntity.java(房间模型)

User.java(改装响应)


提前感谢您!

@我们使用实体元数据在数据库中创建一个映射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. . .
}