如何将嵌套的JSON数据存储在Room Database中?[房间]

本文介绍了如何将嵌套的JSON数据存储在Room Database中?[房间]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!,有如下JSON结构。我还想在Retrofit的帮助下解析后将此数据存储在Room中。当使用相同的实体类时,它会给出错误。如果您能分享一个嵌套数据的示例,我将不胜感激。(请共享用Java编写的代码),此处提供了所有必需的结构:https://github.com/theoyuncu8/roomdb,JSON数据,不能将列表/数组作为列。,如private List<FoodUnitsData> units = null;,这与您上一个问题How can I store data with nested object data in Android?中讨论的问题相同。,所以您需要将数据转换为可处理的列或具有相关的表。,要使用转换后的数据以便可以将其存储在列中,您可以有一个具有列表的类,例如,并将该列设置为(不确定这将如何与Retrofit一起使用):-,然后,您需要TypeConverters将FoodUnitsDataListHolder转换为可以存储的类型(可能是字符串),或者从可以存储的类型(可能是字符串)进行转换。通常,这将指向对象的JSON字符串表示形式。,例如,您需要使用具有合适作用域的[@TypeConverters][1]批注(我建议使用@Database级别)。,How can I store data with nested object data in Android?的答案解释了如何拥有相关的表,您只需要使用合适的实体(每个表使用@Entity注释的类)通过空间来实现这一点,而不是使用SQL来创建表以及@Dao注释的类中用于访问数据的合适的方法。,添加备注,调整代码并不那么困难。以下内容将带您一览无余。,首先考虑Foods类。,正如最初建议的那样,您遇到的问题是成员变量private List<FoodUnitsData> units = null;。列不能是列表/数组。,如前所述,有两个选项将列表存储为单个对象,该对象将转换为Room可以管理的类型。这通常是一个JSON字符串。但是,JSON字符串不容易通过SQL操作/访问,并且会额外膨胀。,您可能很想做一些事情,例如查找低/高卡路里(卡路里)值的食物。那么,从数据库的角度来看,试图从JSON字符串确定这一点将是困难和低效的。因此,强烈建议将单位(嵌入/嵌套数据)存储在表中。,记住这一点,那么第一件事就是从Foods中排除该单元,但是为了JSON,允许它存在于Foods类中。这可以通过使用Room的@Ignore批注来实现。,下一步是添加所需的@Entity@PrimaryKey注释。foodId成员变量对于每个Foods对象似乎是唯一的,因此可能是此对象的候选变量。,由于foodId是字符串,并且Room将坚持它不能为空,因此应该另外使用@NonNull批注对其进行批注。,因此食品可以是:-,查看评论
Room将@Entity批注类(如果在@Database批注的Entities参数中定义)视为。这就是我们介绍的Foods类,它既可以从JSON字符串中提取,也可以作为表提取。,请注意,如果仅从表中提取Foods,则不会填充FoodUnitsData列表。,将FoodUnitsData作为表进行第二次,FoodUnitsData类在没有:-,的情况下不会使其自身成为表(@Entity批注)
a)主键,
b)没有将其关联(映射/引用)到拥有它的食品(其父项)的方式。,这样的类将被创建嵌入FoodUnitsData类,但包含a)和b)的附加成员变量。
返回顶部
跳到底部

Copyright 2011-2024 南京追名网络科技有限公司 苏ICP备2023031119号-6 乌徒帮 All Rights Reserved Powered by Z-BlogPHP Theme By open开发

请先 登录 再评论,若不是会员请先 注册