我有一个包含对象类型的接口。它也用于ViewTypes。
public interface EventType {
int TYPE_FROG = 1;
int TYPE_STEAK = 2;
int TYPE_ELEPHANT = 3;
int getType();
void onBindViewHolder(RecyclerView.ViewHolder viewHolder);
}
我还有三个数据类--青蛙、大象和牛排。我在屏幕上显示所有这些对象的数组。
@Entity
public class Frog implements EventType {
@PrimaryKey(autoGenerate = true)
int id;
String title;
Boolean isCompleted;
@Override
public int getType() {
return EventType.TYPE_FROG;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder) {
ViewHolderFactory.FrogViewHolder frogViewHolder = (ViewHolderFactory.FrogViewHolder) viewHolder;
frogViewHolder.tv.setText("Жаба");
}
}
@Entity
public class Elephant extends Frog implements EventType{
@PrimaryKey(autoGenerate = true)
int id;
String title;
Boolean isCompleted;
@Override
public int getType() {
return EventType.TYPE_ELEPHANT;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder) {
ViewHolderFactory.ElephantViewHolder elephantViewHolder = (ViewHolderFactory.ElephantViewHolder) viewHolder;
elephantViewHolder.tv.setText("Слон");
}
}
@Entity
public class Steak extends Frog implements EventType{
@PrimaryKey(autoGenerate = true)
int id;
String title;
Boolean isCompleted;
@Override
public int getType() {
return EventType.TYPE_STEAK;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder) {
ViewHolderFactory.SteakViewHolder steakViewHolder = (ViewHolderFactory.SteakViewHolder) viewHolder;
steakViewHolder.tv.setText("Стейк");
}
}
在我的片段中,我创建了一个所有三种类型的对象列表,即列表。使用适配器在RecyclerView中显示的列表。
如何将此列表保存到数据库?或者我必须从接口创建一个单独的表吗?
您应该有一个实体
(所以只有一个表)来存储它们。然后,您可以将type
作为字段,并使用该字段将从数据库返回的对象映射为表示层的正确类型。
因此您的实体应该是这样的:
DatabaseEntity(int id, int type, String title, boolean isCompleted)
然后根据对象的类型将其映射到正确的对象,因此:
EventType map(DatabaseEntity entity) {
if(entity.type == TYPE_FROG) {
return new Frog(...);
}
}
这显然只是伪代码,您应该以一种对您来说最有意义的方式来实现它。但是,通常不应该将数据库模型与表示层中的模型混合使用。即使拥有一个模型更简单,但它通常会引起更多的头痛,如您的示例所示。
我在房间使用关系中添加了一对多关系。我引用这篇文章是为了编写以下房间关系代码。 这篇文章讲述了如何从数据库中读取值,但将实体存储到数据库中会导致用户ID为空,这意味着这两个表之间没有关系。 我不确定在具有用户ID值的情况下,将用户和宠物列表插入数据库的理想方法是什么。 1)用户实体: 2) 宠物实体: 3)用户带宠物POJO: 现在,为了从DB中获取记录,我们使用以下DAO: 编辑 我已创建此问题
我开始使用Room数据库并通过几个文档来创建房间实体。这些是我的关系。聊天频道可以有很多对话。所以这是一对多的关系。因此我创建了如下实体。 渠道实体 会话实体 现在,您可以看到,对话属于一个频道。当用户看到频道列表时,我需要在列表项中显示上次对话的几个属性。我的问题是,如果我只是像上面那样声明关系,或者应该在通道类中包含会话对象,这就足够了吗?我还有什么其他方法可以处理它?因为当用户滚动时,UI需
我想实现Android房间持久性。这是我的DAO接口。 出于某种原因,我有以下编译错误: 错误:可观察的查询返回类型(LiveData、Flowable、DataSource、DataSourceFactory等)只能与直接或间接(例如通过@关系)访问至少一个表的SELECT查询一起使用。对于@RawQuery,您应该通过observedEntities字段指定要观察的表的列表。公开摘要andro
错误:查询有问题:[SQLITE_ERROR]SQL错误或缺少数据库(没有这样的表:任务) 显示了这个错误,我怎么可能修复它? 我正在学习这个教程
我知道我不能在查询中使用删除(顺便说一句,这很遗憾),我会得到以下错误: 但是我不能使用Delete(其中…xxx)那么如何通过参数删除特定行?
在Room中添加新创建的对象时,自动生成主键,新创建的对象将保留其未定义的主键。当您需要修改此对象并保留更改时,这证明是不方便的。 让我们举个例子。 因此,让我们创建一个,其是自动生成的。 我们有以下Dao: 我们通过以下存储库进行交互: 所以,现在如果我们这样做,将不会被更新,因为将保持在0并且注释仅在主键已经存在的情况下更新行。 为了解决这个问题,我们可以将的方法更改为在插入后更新id。这个问