android - Room 数据库,使用插入查询 (OnConflictStrategy.REPLACE) 将可空的 @Embedded 数据类设置为空会导致非空内部字段上的 NPE
问题描述
有没有办法在插入时将@Embedded
Room 中的可空数据类设置为?我现在正在这样做:null
OnConflictStrategy.REPLACE
//in dao
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertImage(image: ImageEntity)
和实体:
@Entity(tableName = "images")
data class ImageEntity(
@PrimaryKey
val imageGuid: String = UUID.randomUUID().toString(),
@Embedded(prefix = "server_")
val serverImage: ServerImageEntity? = null,
@Embedded(prefix ="device_")
val deviceImage: DeviceImageEntity? = null
)
data class ServerImageEntity(
val imageGuid: String,
val name: String,
val description: String?,
val url: String,
val status: SyncStatus = SyncStatus.IDLE
)
data class DeviceImageEntity(
val imageGuid: String = UUID.randomUUID().toString(),
val name: String = "",
val description: String? = null,
val uri: Uri,
val status: SyncStatus = SyncStatus.IDLE
)
当我尝试这样称呼它时:
val image = database.imageDao.getImageByGuid(imageGuid)
//later on
database.imageDao.insertImage(image.copy(serverImage = null))
我得到一个 NPE 说imageGuid
forserverImage
是空的。初始设置后是否可以将可空@Embedded
字段设置回空?
解决方案
初始设置后是否可以将可空的@Embedded 字段设置回空?
我认为必须满足以下规则才能使其成为可能:-
读取嵌入字段时,如果嵌入字段(及其子字段)的 所有字段在 Cursor 中为空,则设置为空。否则,它被构造。
推荐阅读
- node.js - 实时客户端1到服务器到客户端2通信
- android - 有人知道如何在索尼相机远程 API 中旋转 liveviewOrientation
- jquery - 如何定义 jquery UI 可排序的可拖动区域?
- bots - Can't send FileMessage to bale bot
- c# - Send a Captured Photo as an Attachement in UWP
- python - Grading System - Input Features
- ruby-on-rails - 远程加载 Rails 的确认对话框消息
- button - 将图像视图设置为按钮上的图标
- php - 如何将 android EdiText 传递给 PHP,将其分解,并将 JSON 传递给 android
- python - 在 pandas 上正确计数 groupby