【发布时间】:2021-10-24 01:58:52
【问题描述】:
我在 Room 数据库中只有一行,但是当我阅读它时,我得到两行一个值。 我不知道房间数据库是如何工作的,或者我遗漏了什么。
祝大家有个愉快的一天!
朋友模型
@Entity(tableName = "friend_table")
class FriendModel
: Serializable {
@PrimaryKey
@NonNull
var _id: String = ""
...
}
DAO 接口
@Dao
interface FriendDAO {
...
@Query("select _id from friend_table")
fun readRoomIdFriendsDAO() : LiveData<List<String>>
}
存储库
class UserRepository(private val userAPI: UserAPI, context : Context) {
private val userDAO : UserDAO
private val friendDAO : FriendDAO
init {
val userDatabase: UserRoomDatabase = UserRoomDatabase.getInstance(context)
val friendDatabase: FriendRoomDatabase = FriendRoomDatabase.getInstance(context)
userDAO = userDatabase.getUserDao()
friendDAO = friendDatabase.getFriendDao()
}
...
fun readRoomIdFriendsDAO() : LiveData<List<String>> = friendDAO.readRoomIdFriendsDAO()
}
视图模型
class UserViewModel(private val userRepository: UserRepository) : ViewModel() {
...
fun readRoomIdFriendsDAO() : LiveData<List<String>> = userRepository.readRoomIdFriendsDAO()
}
我在 MainActivity 中使用它
viewModel.readRoomIdFriendsDAO().observe(this,{ listRoomId ->
if(listRoomId!=null && listRoomId.isNotEmpty()){
for(item in listRoomId){
Log.e(TAG, "RoomId: $listRoomId")
}
}
})
这就是我得到的
E/Log: RoomId: [IZnIP4srwDZiB1foauiZF6R60RF3]
...
E/Log: RoomId: [IZnIP4srwDZiB1foauiZF6R60RF3]
【问题讨论】:
-
检查作为观察者父级的方法是否被调用了两次。 MainActivity 中的更多代码将帮助我们更好地理解。
-
哦,我明白了,我会检查 MainActivity,我的 MainActivity 如果我把所有代码都放得不好,那我就太乱了。非常感谢
标签: android kotlin android-room