gpt4 book ai didi

安卓房间 : Efficient way to transform json result into db object

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:58:48 24 4
gpt4 key购买 nike

问题

我有一个从 API 调用中解析出来的 POJO,如下所示

public class Article {

public Long id;

@Expose
@SerializedName("section")
public String section;

@Expose
@SerializedName("title")
public String title;

@Expose
@SerializedName("topics")
public List<String> topics;

@Expose
@SerializedName("media")
public List<Media> media;
}

为了尽量减少冗余和重复,我希望创建这样的模式

@Entity(foreignKeys = { 
@ForeignKey(entity = Article.class, parentColumns = "id", childColumns = "articleId"),
@ForeignKey(entity = Topic.class, parentColumns = "id", childColumns = "topicId"),
@ForeignKey(entity = Media.class, parentColumns = "id", childColumns = "mediaId")
}
public class Articles {

@PrimaryKey
public Long articleId;

@ColumnInfo(name = "topic_id")
public Long topicId;

@ColumnInfo(name = "media_id")
public Long mediaId;
}

@Entity
public class Article {
// Left out
}

@Entity
public class Media {
// Left out
}

如您所见,当我调用 DAO 方法访问数据库时,我不能直接传入 pojo 对象(除非我弄错了这一点)。我相信我需要将对象转换为与数据库实体模型匹配的对象。

问题

Android Framework 是否提供了从 POJO 转换为数据库模型对象的自然方式?除了自己手动转换之外,还有其他方法可以做到这一点吗?

我尝试过的事情

  • 我知道我可以在我的 DAO 接口(interface)中的一个方法内实现转换。但随后我将不得不创建一个新对象并手动设置所有值。
  • 我最初认为类型转换器会起作用,但它们似乎可以转换个别列。

最佳答案

您所要做的就是对将引用另一个类的 POJO(模型类)使用 @Embedded 注释。然后创建一个类型转换器类。

@Embedded(prefix = "media")
private Media media;

@TypeConverters({TypeConvertorClass.class})
@Database(entities = {Article .class,Media.class}, version = 1, exportSchema = false)
public abstract class `DataBaseExample` extends RoomDatabase {
}


public class Converters {
@TypeConverter
public static ArrayList<String> fromString(String value) {
Type listType = new TypeToken<ArrayList<String>>() {}.getType();
return new Gson().fromJson(value, listType);
}

@TypeConverter
public static String fromArrayList(ArrayList<String> list) {
Gson gson = new Gson();
String json = gson.toJson(list);
return json;
}
}


public class TypeConvertorClass {
@TypeConverter
public static Media getMedia(String longId) {
return longId== null ? null : new Meida();
}
}

@Entity(tableName = "Article")
public class Article {
@ColumnInfo (name = "article_id")
public Long id;

@Expose
@SerializedName("section")
public String section;

@Expose
@SerializedName("title")
public String title;

@Expose
@SerializedName("topics")
public List<String> topics;

@Embedded(prefix = "media") // We need relation to Media table
@Expose
@SerializedName("media")
public List<Media> media;
}

public class Media {
@ColumnInfo (name = "media_id")
public Long id;
}

关于安卓房间 : Efficient way to transform json result into db object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52619663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com