用于Gson的POJO可以重复用于Room使用的类

时间:2017-08-16 12:32:14

标签: android android-room gson

使用Gson时,它创建了POJO,用于解析/序列化远程服务的json数据结果。它可能有一些Gson的注释

public class User {
    @SerializedName(“_id”)
    @Expose
    public String id;
    @SerializedName(“_name”)
    @Expose
    public String name;
    @SerializedName(“_lastName”)
    @Expose
    public String lastName;

    @SerializedName(“_age”)
    @Expose
    public Integer age;

}

但是对于使用Room的类,它可能有自己的注释:

import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;

@Entity
public class User {
    public @PrimaryKey String id;
    public String name;
    public String lastName;
    public int age;
}

可以将这两个与两个库中的所有注释合并为一个(如果存在注释冲突(希望不是),则必须使用长包名解析)?

2 个答案:

答案 0 :(得分:5)

是的,你可以为room和gson制作一个单独的pojo类。 当对服务器的请求以及是否有任何数据未在服务器中发送时,使用 transient 关键字并且如果您不想插入任何使用的字段表 的 @Ignore

使用下面代码为gson和room ..

 @Entity
public class User {

    @PrimaryKey(autoGenerate = true)
    @SerializedName("_id")
    @ColumnInfo(name = "user_id")
    public long userId;
    @SerializedName("_fName")
    @ColumnInfo(name = "first_name")
    private String name;

    public long getUserId() {
        return userId;
    }

    public void setUserId(long userId) {
        this.userId = userId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

答案 1 :(得分:4)

它可以工作,但可能会在将来导致一些问题,因此不建议用于干净的软件设计。请参阅此演讲:Marko Miloš: Clean architecture on Android

正如所指出的那样,你应该为你的db和webresults / json使用不同的实体,并在它们之间进行转换。