android - 指定为非空的参数是房间数据库中的空错误
问题描述
这是我的实体类:
@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
但是每次我尝试将数据插入表中时都会出现错误,如何在使用房间数据库时在表中插入空数据对象?
解决方案
这里的问题是 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 为空时,您可以使用“”(空字符串)。
有关转换器的更多信息:这里
推荐阅读
- android - Flutter Widgets 对齐没有响应
- javascript - 存储实时 htmlCollection 与迭代项目 ID 数组(和树遍历)的成本
- java - 如何在嵌入式 spring ldap 服务器中启用附加模式?
- ios - Xcode Instruments,网络连接:发送的总字节数少于实际
- sql-server - 使用 patindex 连接两个表列的性能调整
- c# - 无法保存“AssemblyInfo.cs”,因为它未在编辑器中打开
- c# - c#如何验证用户的类型?
- android - 从 sqlite android 实现更好的搜索
- php - 一旦我们得到浏览器的响应,如何显示消息
- c# - C# MongoDB IAsyncCursor 解释