Android ROOM保留复杂对象

时间:2018-10-08 00:06:57

标签: android android-room

我有一个来自RESTFUL API的JSON响应,并且我已映射到我想使用ROOM持久保存的POJO。 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;
    }
}

1 个答案:

答案 0 :(得分:1)

您需要使用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