Android ROOM可以持久化复杂对象

Android ROOM可以持久化复杂对象,android,android-room,Android,Android Room,我有一个来自RESTfulAPI的JSON响应,并且我已经映射到POJO,我希望使用ROOM持久化。POJO有对象列表,对象类又有业务对象列表和其他业务对象,有人能给我举个例子说明如何映射这些实体并定义DAO来查询它们吗。任何链接、示例或教程都将非常有用。POJO如下 public class A{ @PrimaryKey(autoGenerate = true) private long id; @SerializedName("list") @Expos

我有一个来自RESTfulAPI的JSON响应,并且我已经映射到POJO,我希望使用ROOM持久化。POJO有对象列表,对象类又有业务对象列表和其他业务对象,有人能给我举个例子说明如何映射这些实体并定义DAO来查询它们吗。任何链接、示例或教程都将非常有用。POJO如下

public class A{

    @PrimaryKey(autoGenerate = true)
    private long id;


    @SerializedName("list")
    @Expose
    private List<B> list = null;
}

public class B{

    @SerializedName("dt")
    @Expose
    private Integer dt;

    @SerializedName("weather")
    @Expose
    private List<C> c= null;

    public Integer getDt() {
        return dt;
    }

    public void setDt(Integer dt) {
        this.dt = dt;
    }

    public B  withDt(Integer dt) {
        this.dt = dt;
        return this;
    }

   public java.util.List<Weather> getWeather() {
        return weather;
    }

    public void setWeather(java.util.List<C> c) {
        this.c= c;
    }

    public WeatherList withWeather(java.util.List<C> c) {
        this.c= c;
        return this;
    }
}
公共A类{
@PrimaryKey(自动生成=真)
私人长id;
@序列化名称(“列表”)
@暴露
私有列表=空;
}
公共B级{
@序列化名称(“dt”)
@暴露
私有整数dt;
@序列化名称(“天气”)
@暴露
私有列表c=null;
公共整数getDt(){
返回dt;
}
公共void setDt(整数dt){
这1.dt=dt;
}
带dt的公共B(整数dt){
这1.dt=dt;
归还这个;
}
public java.util.List getWeather(){
回归天气;
}
公共void setWeather(java.util.List c){
这个.c=c;
}
带有天气的公共天气列表(java.util.List c){
这个.c=c;
归还这个;
}
}

您需要使用类型转换器

创建一个要转换的类

class Converters {

    @TypeConverter
    fun gsonToWeather(json: String?): Weather? {
        return Gson().fromJson(json, Weather.class);
    }

    @TypeConverter
    fun factWeatherToGson(weather: Weather): String? {
        return Gson().toJson(weather);
    }

    @TypeConverter
    fun gsonToB(json: String?): B? {
        return Gson().fromJson(json, B.class);
    }

    @TypeConverter
    fun bToGson(b: B): String? {
        return Gson().toJson(b);
    }

    @TypeConverter
    fun gsonToC(json: String?): C? {
        return Gson().fromJson(json, C.class);
    }

    @TypeConverter
    fun cToGson(c: C): String? {
        return Gson().toJson(c);
    } 
}
然后在你的数据库上

@TypeConverters(Converters.class)
abstract class YourDatabase {

}

参考:

如果我们使用类型转换器,数据将作为一列存储在表中,但我需要查询业务对象的属性,即列表,我们如何处理。如果我们必须建立任何外键约束。如果是这样,请提供教程或任何文档的链接。谢谢你的回答帮助了我很多,并解决了这个问题。