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

lan*_*nyf 9 android gson android-room

当使用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;
}
Run Code Online (Sandbox Code Playgroud)

}

但对于使用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;
}
Run Code Online (Sandbox Code Playgroud)

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

And*_*eam 7

是的,你可以为房间和gson制作一个单一的pojo课程.当对服务器的请求以及在服务器中没有发送任何数据时,使用了临时关键字,如果你不想插入任何使用@Ignore的字段表 .

下面用于gson和房间的代码..

 @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;
    }
}
Run Code Online (Sandbox Code Playgroud)


G00*_*0fY 5

它可以工作,但将来可能会导致一些问题,因此不建议用于干净的软件设计。观看有关此内容的演讲:MarkoMiloš:Android上的简洁架构

如前所述,您应该对数据库和webresults / json使用不同的实体,并在它们之间进行转换。

  • 他到底推荐什么?我们应该复制pojo类吗? (3认同)
  • 他基本上说,当它们在不同的层上工作时,清晰的架构建议为每种情况使用不同的类 (2认同)