如何将房间实例传递给 JobService?
Posted
技术标签:
【中文标题】如何将房间实例传递给 JobService?【英文标题】:How to pass room instance to JobService? 【发布时间】:2020-11-14 04:15:50 【问题描述】:为了在 JobScheduler 中将某些参数保存到本地,我在 JobService 下面实现了,
class MyJobService : JobService()
private var context = applicationContext
private var db = Room.databaseBuilder(
context, // ERROR
AppDatabase::class.java, "database-name"
).build()
override fun onStopJob(params: JobParameters?): Boolean
...
override fun onStartJob(params: JobParameters?): Boolean
// use db
...
但applicationContext
无法使用以下错误消息,
Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
所以我正在尝试另一种方式,将房间实例传递给 JobInfo 中的 MyJobService,
val job = JobInfo.Builder(
MY_BACKGROUND_JOB,
ComponentName(context, MyJobService::class.java) // seems to can not passing any arguments for constructor
)
.build()
但在Class<?>
,似乎无法传递参数。
onStartJob
中的房间实例如何使用?
【问题讨论】:
已解决:***.com/questions/21994612/… 这不是一个优雅的解决方案!您不应该到处传递上下文,而是到处创建 Room 实例。 【参考方案1】:您应该创建一个 (f.e.)Repository
类来处理与 Room 的所有交互。在您的应用程序中创建一个单例。
那么你只需要通过((MainApp) getApplication()).getRepository()
获取就可以了
在official Android examples Github 上找到一个非常好的示例!
【讨论】:
感谢您的回答!!以上是关于如何将房间实例传递给 JobService?的主要内容,如果未能解决你的问题,请参考以下文章
如何从扩展 JobService 的类中调用将视图作为参数的 MainActivity 方法?