【问题标题】:Android Room Database. How to add my Model class into Room databaseAndroid 房间数据库。如何将我的模型类添加到房间数据库中
【发布时间】: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代码

标签: android database orm android-architecture-components


【解决方案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);
    }

}

同样你可以实现检索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多