LiveData,Room持久Ui未更新



我正在使用Room构建一个android应用程序,用于数据持久性和LiveData。

我有多个片段和viewModel。

当我启动应用程序并登录MainActivityView时,我也会打电话检索用户信息并将其保存在房间数据库中。这很好用。

然后,当我访问用户配置文件片段时,我希望看到显示的用户信息,但什么都没有显示。数据在数据库中,但UI似乎没有刷新。

在我的用户档案片段中,我这样做:

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {

viewModel.getUserInfo().observe(viewLifecycleOwner, object: Observer<UserProfileResp?> {
override fun onChanged(t: UserProfileResp?) {
getName(t?.firstName, t?.lastName)?.let {
binding.userEt.apply {
setText(it)
showTopText()
}
}

getUserInfo在我的UserProfileViewModel中定义如下:

fun getUserInfo(): MutableLiveData<UserProfileResp?> = appRepository.getUserInfo()

AppRepository为:

override fun getUserInfo(): MutableLiveData<UserProfileResp?> =  userInformationDb.getUserInfo()

并且对Db的调用为:

@Query("SELECT userinfo from usertable WHERE username='USER'") fun getUserInfo(): MutableLiveData<UserProfileResp?>

我还创建了setUserInfo,但在加载MainActivity时会在代码的早期调用它。目标是让mainActivity或我的主页片段通过它们的viewModel请求UserInformation并将其保存在Db中。这是有效的,但在剖面碎片中观察似乎根本不起作用。

知道吗?

我可以看看你的UserProfileResponse课程吗?这可能是因为UserProfileResponse类中有firstNamelastName字段,但在SQL代码中,您并没有尝试获取这些字段。

您应该编写SELECT * ...或您想要接收的所有字段,而不是SELECT userinfo ....。下面的快速示例:

@Query("SELECT * from usertable WHERE username='USER'") fun getUserInfo(): MutableLiveData<UserProfileResp?>

另请注意:请确保您的用户的用户名。因为WHERE不区分大小写。如果要保存用户名,最好在保存数据和获取数据时将其全部小写。

最新更新