安卓ROOM用于持久化复杂对象

3

我有一个来自RESTFUL API的JSON响应,并将其映射到POJO,我希望使用ROOM进行持久化。 POJO具有对象列表和对象类,该对象类反过来又具有Business对象列表以及其他Business对象。请给我一个示例,演示如何映射这些实体并定义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;
    }
}

你好,能分享一下你已经完成的示例项目吗?我需要检查一些地方。 - user17115124
1个回答

0

你需要使用TypeConverter

创建一个类,它可以转换你想要的所有内容

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 {

}

参考资料:https://developer.android.com/training/data-storage/room/referencing-data


如果我们使用类型转换器,数据将存储为表中的单个列,但我需要查询业务对象的属性,即List<Obj>。我们如何处理这个问题?如果我们必须建立任何外键约束,那么请提供教程或任何文档的链接。 - Nivedita puneet
谢谢你的答案,帮了我很多,问题已解决。 - Nivedita puneet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接