使用PeriodicWorkRequest使用Room填充数据库

问题描述 投票:0回答:1

我一直在遵循this关于如何使用Room实施数据库访问的教程。就实现的解释而言,可从WordRepository(存储库)访问AppDatabase(RoomDatabase),以抽象化对数据库的访问,该数据库可从可从MainActivity访问的WordViewModel(AndroidViewModel)访问。

我的需求有很大不同,本教程未涵盖。我将需要每小时从服务器获取数据,为此我选择了PeriodicWorkRequest为我执行定期工作。当我尝试将定期工作人员从服务器获取的数据插入数据库时​​,就会出现问题:

AppDatabase db = AppDatabase.getDatabase(context);

但是后来我错过了使用存储库的意义,该存储库应该是访问数据库的唯一实体。因此,我尝试从我的工作人员访问存储库,但这意味着将工作人员没有的应用程序传递给它。我曾考虑过从ViewModel运行工作程序,并获取其结果,但是很遗憾,PeriodicWorkRequest cannot返回了结果。

我觉得我现在处于22级的情况。想知道解决问题的最佳方法是什么,请考虑定期填充数据库,并在用户打开应用程序以及将新数据从服务器添加到数据库中时读取数据(因此,观察者和onChange可能是考虑到的好主意

android android-room android-architecture-components android-viewmodel android-workmanager
1个回答
0
投票

但是但是我错过了使用存储库的意义, 是访问数据库的唯一实体。所以我尝试访问 来自我的工作人员的存储库,但这意味着将其传递给应用程序, 工人没有的。

工人确实有申请!您可以通过在Worker对象中调用getApplicationContext()来获取它。然后,您可以在将参数传递给Repository构造函数之前,将返回的对象类型转换为Application

© www.soinside.com 2019 - 2024. All rights reserved.