首页 > 解决方案 > 指定为非空的参数是房间数据库中的空错误

问题描述

这是我的实体类:

@Entity
data class User(
    @PrimaryKey
    @Json(name = "id") val userId: String,
    @Json(name = "login") val userName: String,
    @Json(name = "avatar_url") val userAvatar: String,
    val profile: Profile? = null
) : Serializable

这是我的个人资料数据类

data class Profile(
    val avatar_url: String,
    val bio: String,
    val blog: String,
    val company: Any,
    val created_at: String,
    val email: Any,
    val events_url: String,
    val followers: Int,
    val followers_url: String,
    val following: Int,
    val following_url: String,
    val gists_url: String,
    val gravatar_id: String,
    val hireable: Boolean,
    val html_url: String,
    val id: Int,
    val location: String,
    val login: String,
    val name: String,
    val node_id: String,
    val organizations_url: String,
    val public_gists: Int,
    val public_repos: Int,
    val received_events_url: String,
    val repos_url: String,
    val site_admin: Boolean,
    val starred_url: String,
    val subscriptions_url: String,
    val twitter_username: Any,
    val type: String,
    val updated_at: String,
    val url: String
) : Serializable

但是每次我尝试将数据插入表中时都会出现错误,如何在使用房间数据库时在表中插入空数据对象?

标签: androidkotlinandroid-room

解决方案


这里的问题是 Room 不知道如何将Profile类型的属性插入到表中。

简单的解决方案是使用类型转换器。类似于以下内容:

class DatabaseConverters {
    @TypeConverter
    fun toProfile(profileJson: String): Profile? {
        return <Create a Profile object out of a JSON string>
    }

    @TypeConverter
    fun fromProfile(profile: Profile?): String {
        return <JSON string representation of Profile object>
    }
}

在您的情况下 - 当 Profile 为空时,您可以使用“”(空字符串)。

有关转换器的更多信息:这里


推荐阅读