Android ROOM可以持久化复杂对象
我有一个来自RESTfulAPI的JSON响应,并且我已经映射到POJO,我希望使用ROOM持久化。POJO有对象列表,对象类又有业务对象列表和其他业务对象,有人能给我举个例子说明如何映射这些实体并定义DAO来查询它们吗。任何链接、示例或教程都将非常有用。POJO如下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
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 {
}
参考:如果我们使用类型转换器,数据将作为一列存储在表中,但我需要查询业务对象的属性,即列表,我们如何处理。如果我们必须建立任何外键约束。如果是这样,请提供教程或任何文档的链接。谢谢你的回答帮助了我很多,并解决了这个问题。