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&lt;&gt; 获取添加到 Room 数据库的新数据。该数据在分页下一部分数据时来自服务器 嗯,好吧,我们真的帮不了你太多,因为我们不知道 BidsItemUserFotosItem 是什么。我们不知道ResultsItem 与这些其他事物之间关系的性质(例如,User 是否有一个 ResultsItem 或 N 个可能的 ResultItem 实例)?最有可能的是,所有这些都是实体,您需要根据您拥有的关系类型确定外键的去向。忽略@Relation。如果ResultsItemUser 之间存在纯1:1 关系,则User 最多可能是@Embedded 我在上面添加了BidsItemFotosItem代码 【参考方案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 房间数据库。如何将我的模型类添加到房间数据库中的主要内容,如果未能解决你的问题,请参考以下文章

使用 Paging 3 Android 从房间获取最新数据

android房间数据库锁定

字节缓冲区的大小和形状不匹配。我在将我的 Ml 模型集成到 android 应用程序时遇到了这个错误

Android 如何使用 Proguard 将我的所有类放在一个包中

Android - 如何从小部件访问房间数据库

Android房间迁移添加枚举列表