使用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;
}
可以将这两个与两个库中的所有注释合并为一个(如果存在注释冲突(希望不是),则必须使用长包名解析)?
答案 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使用不同的实体,并在它们之间进行转换。