6

我正在尝试使用具有值类的房间实体:

@JvmInline
value class UserToken(val token: String)

和实体:

@Entity(tableName = TABLE_AUTH_TOKEN)
data class TokenEntity(
  @PrimaryKey val id: Int = 0,
  val token: UserToken
)

我收到以下错误:

error: Entities and POJOs must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type).
public final class TokenEntity {
             ^

甚至可以使用价值等级的房间吗?我找不到任何关于此的内容。谢谢

4

2 回答 2

1

UserToken 总是只有一个属性?在这种情况下,您不需要两个类,只需在您的实体类上直接使用token: String即可;

如果你真的需要保留这个课程,你有两个选择:

  • TypeConverter,你基本上会将对象转换为json,并在数据库中保存为字符串;

  • 关系,您将在其中转换实体中的 UserToken,并在 TokenEntity 上保存 tokenId。

于 2021-10-03T16:36:51.017 回答
0

我认为是的,如果您可以为其提供类型转换器以在需要存储时将其更改为某种原始数据类型(int,string,long ...等),并在需要存储时将其更改回其类类型它是从数据库中获取的。

您可以从此处阅读有关类型转换器的信息

使用 Room 引用复杂数据

除此之外,您的其他类应该是一个实体,并使用Relation将您的两个实体绑定在一起。

至少这就是我对如何使用 Room 的了解。

于 2021-10-03T16:00:23.000 回答