首页 > 解决方案 > 房间数据库:插入数据后如何获得响应?

问题描述

我想在插入数据完成后做一些事情,但我不知道该怎么做。这是我的房间数据库结构。

模型

@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)
       }
       ...
}

祝大家拥有美好的一天!

标签: androidkotlinandroid-room

解决方案


如果要在成功插入数据到数据库后获取Id,添加Long为返回类型如下

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertMessageDAO(messageModel: MessageModel): Long

对于集合,您可以添加List<Long>为返回类型


推荐阅读