我正在从Room数据库中检索数据,并将其作为LiveData返回。当我将该数据放入Activity中的变量时,它显示为null,但Live数据具有该值。有什么问题吗?
var loginCredentials: User? = null
DBUtils.with(this).getDB().userDao()
.loginValidation(accoutNo, pincode)
.observe(this) {
loginCredentials = it
Log.e("Login it", it.toString())
}
Log.e("Login variable", loginCredentials.toString())
我猜这个值在另一个线程上。我该怎么解决这个问题?
2条答案
按热度按时间vd2z7a6w1#
因为它在另一个线程上工作。你不能像这样传递值。这是一个异步进程。
您必须创建一个实时数据观察器,并观察活动或片段上的特定元素。这就是它的运作方式
你可以遵循的步骤:
1.初始化变量:-
1.注意:-
2ul0zpep2#
问题是你在观察者之外显示下面的日志
而loginCredentials可能没有分配,因为livedata observer还没有触发,上面的log语句在observer触发之前被调用。
您需要在观察者内部执行任务,以便在loginCredentials变量中具有值。