当前位置: 首页 > 知识库问答 >
问题:

房间不知道如何将此字段保存到数据库中

柴深
2023-03-14

我需要你的帮助。我试图在没有反序列化的情况下找到解决方案,但我什么也没找到。如果你能帮我就好了...所以我有了下面的JSON文件

"resources": [{
    "id": 441988,
    "name": "TVA",
    "parent": {
      "id": 159
    },
  },
  {
    "id": 441900,
    "name": "Marketing",
    "parent": {
      "id": 166
    },
}]
    @Entity(tableName = "resources")
    class CategoryBean {

    @PrimaryKey
    @ColumnInfo(name = "resource_id")
    @SerializedName("id")
    private var mId: Int = 0

    @ColumnInfo(name = "name")
    @SerializedName("name")
    private var mName: String? = null

    @ColumnInfo(name = "parent")
    @SerializedName("parent")
    private var mParent: ParentBean? = null

    fun getId(): Int {
        return mId
    }

    fun getName(): String? {
        return mName
    }

    fun getParent(): ParentBean? {
        return mParent
    }

    fun setParent(parent: ParentBean) {
        mParent = parent
    }

    fun setId(id: Int) {
        mId = id
    }

    fun setName(name: String) {
        mName = name
    }
class ParentBean {

    @SerializedName("id")
    private var mId: Int = 0

    fun getId(): Int? {
        return mId
    }

}

谢谢你的时间和帮助。

我有以下错误:

Cannot figure out how to save this field into database. You can consider adding a type converter for it.

共有1个答案

孟健
2023-03-14

Room工作在SQLite数据库之上,当您将类注释为@Entity时,您正在创建一个表,该表的列是根据类的属性定义的,因此您不能直接存储像ParentBean这样的自定义类型,为此,您需要将Mparent属性注释为@Embedded:

@Entity(tableName = "resources")
class CategoryBean constructor(
    @PrimaryKey
    @ColumnInfo(name = "resource_id")
    @SerializedName("id")
    var mId: Int,
    @ColumnInfo(name = "name")
    @SerializedName("name")
    var mName: String?,
    @SerializedName("parent")
    @Embedded
    var mParent: ParentBean?
)

然后在ParentBean中为属性定义列名:

data class ParentBean constructor(@SerializedName("id") @ColumnInfo(name = "parent_id")var mId: Int)

资源表将具有以下列:resource_idnameparent_id

来源:https://developer.android.com/training/data-storage/room/defining-data

注意:您不需要在Kotlin中手动定义getter和setter。

 类似资料:
  • 我试图创建Room数据库并向其插入值,但我得到了这个错误: 公共抽象类WeatherDatabase扩展了AndroidX.Room.RoomDatabase{^error:无法知道如何将此字段保存到数据库中。可以考虑为它添加类型转换器。AndroidX.Room.RoomDatabaseError中的-mDatabase:无法确定如何将此字段保存到数据库中。可以考虑为它添加类型转换器。Andro

  • 我试图找到一种方法来保存复选框的状态到房间数据库,但当我点击复选框并重新打开应用程序时,它的状态并没有改变。我不知道我哪里出错了。我已经搜索了前面的问题,但找不到解决办法。下面是我的代码和感谢。 TodoAdapter 主体活动

  • 已经创建了一个@Embedded类播放器。我想在其中添加ArrayList字段,该字段使用@TypeConverters,它在保存时将列表转换为Gson,在加载时将其转换为Gson。请告诉我如何在void migrate() 方法中请求将列表添加到Player类的现有实例中。 类保存: TypeConverter:

  • 我正在尝试在我的设计表单上添加一个额外的字段,如下所示: 我必须允许额外的字段,所以我创建了一个新的初始值设定项devise_permitted_parameters.rb,如下所示 输出如下: "email"=? LIMIT?[["email","wtgwg@gmail.com "], ["LIMIT",1]]SQL(1.1ms)插入到"用户"("email","encrypted_passwo

  • 我在我的android应用程序中使用了reverfit2和Rxjava2作为网络库,NodeJS和MongoDB作为后端服务,我想从服务器获取数据,并将数据存储在房间数据库中,以便如果用户再次打开应用程序,它将从房间获取数据,而不是从服务器获取数据,直到服务器上添加了一些新的数据。 我想达到的目标: 1)从服务器获取数据后,存储在房间数据库中。 2)显示房间数据库中数据,直到服务器上更新了一些新数