android - 房间数据库:插入数据后如何获得响应?
问题描述
我想在插入数据完成后做一些事情,但我不知道该怎么做。这是我的房间数据库结构。
模型
@IgnoreExtraProperties
@Entity(tableName = "message_table")
data class MessageModel(
@NonNull
@PrimaryKey
var messageId: String = "",
var messageType: String? = null,
var messageTimestamp: Long? = null,
var messageData: String? = null,
var messageSenderId: String? = null,
var roomId: String = "",
var isSeen: Boolean = false,
var uploadSuccess : Boolean = false
) : Serializable {
}
DAO接口
@Dao
interface MessageDAO {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertMessageDAO(messageModel: MessageModel)
...
}
存储库
class MessageRepository(context : Context) {
private val messageDAO : MessageDAO
init {
val messageDatabase: MessageRoomDatabase = MessageRoomDatabase.getInstance(context)
messageDAO = messageDatabase.getMessageDao()
}
suspend fun insertMessageDAO(messageModel: MessageModel) = messageDAO.insertMessageDAO(messageModel)
...
}
视图模型
class MessageViewModel(private val messageRepository: MessageRepository) : ViewModel() {
fun insertMessageDAO(messageModel: MessageModel) = viewModelScope.launch {
messageRepository.insertMessageDAO(messageModel)
}
...
}
祝大家拥有美好的一天!
解决方案
如果要在成功插入数据到数据库后获取Id,添加Long
为返回类型如下
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertMessageDAO(messageModel: MessageModel): Long
对于集合,您可以添加List<Long>
为返回类型
推荐阅读
- javascript - 消息在它需要所有数据之前被发送,这意味着它在所有消息中发送了几条具有相同数据的消息
- amazon-web-services - 如何将大型黑名单与 AWS WAF 集成
- reactjs - axios 和 fetch 在 React 中返回空响应数据
- c++ - boost::interprocess::interprocess_condition::timed_wait 永远等待
- android - 如何使用 recylerview 和 Fragments 和 viewmodel 显示 cardview 项目
- c# - 从 C# 中的文本文件中读取自定义文本数据
- python - 在增加样本量的同时使用 ttest
- github - 任何人都可以协助在 Github 上显示正确的徽章(报道)
- javascript - 如何优先加载在多个 ajax 请求中返回的图像
- terraform - 在 terraform azurerm_monitor_metric_alert 范围设置中使用 splat 运算符