问题:
我正在使用Room Persistence Library,到目前为止,一切工作正常,只是从select查询中获取了一个数据,当我从周期性作业(工作经理的工作人员)中调用该数据时,我需要同步该数据。我将返回类型定义为LiveData,因为我也在UI中出于显示目的访问它,因此观察者对此非常有用,但现在我在Job中也需要相同的数据。
代码段
@Query("SELECT * from readings ORDER BY date, time ASC")
LiveData<List<Reading>> getAllReadings();
试过了
我已经在LiveData中尝试过getValue()方法,但由于在进行查询时未将数据加载到LiveData中,因此它返回null。
readingDao().getAllReadings().getValue() // returns null
可能的解决方案
我只能想到一种解决方案,就是用不同的名称和返回类型(不带LiveData)来复制getAllReadings查询,但是我认为这不是一种干净的方法,因为它增加了重复代码以获取同步。返回类型。
请让我知道是否还有其他解决方案,或者是否有某种方法可以从LiveData变量同步访问数据。
最佳答案
初始化Room DB时,可以允许主线程查询,但这显然是不可取的。这将为您提供同步行为,但会阻止用户界面。您是否有使其同步的特定原因?getValue()
返回null的原因是因为Room正在异步查询数据。您可以附加观察者或回调函数以在查询完成后获取结果。您可以将结果显示到UI或从那里链接其他调用以进行顺序操作等。
我使用RxJava来包装用于异步查询的查询请求,但我也可以使用AsyncTask。
关于android - Android-Room Persistence Library-根据需要同步和通过观察者访问数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54116312/