Android 房间数据库。如何将我的模型类添加到房间数据库中
Posted
技术标签:
【中文标题】Android 房间数据库。如何将我的模型类添加到房间数据库中【英文标题】:Android Room Database. How to add my Model class into Room database 【发布时间】:2017-07-02 12:28:12 【问题描述】:我遇到了将模型类添加到 Room 数据库的问题。我读过@Relation、@Embedded,但我不知道如何处理我的模型类。
这里是我的模型类,它来自服务器。我需要存储这些数据
public class ResultsItem
private String model;
private int id;
private int distanceLon;
private String brand;
//*PROMBLEM HERE*
private List<BidsItem> bids;
//*PROMBLEM HERE*
private User user;
//*PROMBLEM HERE*
private List<FotosItem> fotos;
// getters/setters...
FotosItem 类
public class FotosItem
private String imageUrl;
private int resultItemId;
private int id;
//getters/setters
BidsItem 类
public class BidsItem
private double distanceToAuto;
private boolean isWin;
private int sum;
private String currency;
private int id;
//getters/setters
如果有人告诉我我需要做什么,或者至少要朝哪个方向前进,我将不胜感激
【问题讨论】:
如果你想在databsae中保存一个类,你必须将它转换成一个字节数组(apache commons lang有一个工具,但是你可以自己创建它,如果你喜欢它)然后您使用 blob 字段将其放入数据库中。使用 getBlob 加载它并使用 apache lang 将字节流转换回类 @LunarWatcher thx 快速评论,但我还需要使用LiveData<>
获取添加到 Room 数据库的新数据。该数据在分页下一部分数据时来自服务器
嗯,好吧,我们真的帮不了你太多,因为我们不知道 BidsItem
、User
或 FotosItem
是什么。我们不知道ResultsItem
与这些其他事物之间关系的性质(例如,User
是否有一个 ResultsItem
或 N 个可能的 ResultItem
实例)?最有可能的是,所有这些都是实体,您需要根据您拥有的关系类型确定外键的去向。忽略@Relation
。如果ResultsItem
和User
之间存在纯1:1 关系,则User
最多可能是@Embedded
。
我在上面添加了BidsItem
和FotosItem
代码
【参考方案1】:
你可以通过在 DAO 类中做一些 tweek 来实现它。对列表使用忽略注释。
public class ResultsItem
private String model;
private int id;
private int distanceLon;
private String brand;
@Ignore
private List<BidsItem> bids;
private User user;
@Ignore
private List<FotosItem> fotos;
// getters/setters...
FotosItem 类
public class FotosItem
private String imageUrl;
private int resultItemId;
private int id;
//getters/setters
BidsItem 类
public class BidsItem
private double distanceToAuto;
private boolean isWin;
private int sum;
private String currency;
private int id;
//getters/setters
现在的 DAO 类
@Dao
public abstract class DBAccess
@Insert
public abstract void insertBids(List<BidsItem> pets);
@Insert
public abstract void insertFotos(List<FotosItem> pets);
@Insert
public abstract void insertResultItem(ResultsItem resultItem);
public void insertResultWithBidsFotos(ResultsItem resultItem)
insertBids(resultItem.getBids());
insertFotos(resultItem.getFotos());
insertResultItem(resultItem);
同样你可以实现检索。
【讨论】:
以上是关于Android 房间数据库。如何将我的模型类添加到房间数据库中的主要内容,如果未能解决你的问题,请参考以下文章
字节缓冲区的大小和形状不匹配。我在将我的 Ml 模型集成到 android 应用程序时遇到了这个错误