我有一个存储库,它包含LiveData对象,并由活动和前台服务通过ViewModel使用.当我开始观察活动时,一切都按预期工作.但是,从服务中观察不会触发观察.这是我使用的代码
class MyService: LifecycleService() {
lateinit var viewModel: PlayerServiceViewModel
override fun onCreate() {
viewModel = MyViewModel(applicationContext as Application)
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
viewModel.getLiveData().observe(this, Observer { data ->
// Do something with the data
})
}
}
Run Code Online (Sandbox Code Playgroud)
任何想法为什么它不起作用,我没有收到数据?
有人可以帮我找到我在哪里错了.我需要不断观察网络数据,并在工作人员发生数据更改时更新UI.请注意,这在升级到androidx之前有效.
这是一个工人类.
class TestWorker(val context: Context, val params: WorkerParameters): Worker(context, params){
override fun doWork(): Result {
Log.d(TAG, "doWork called")
val networkDataSource = Injector.provideNetworkDataSource(context)
networkDataSource.fetchData(false)
return Worker.Result.SUCCESS
}
companion object {
private const val TAG = "MY_WORKER"
}
}
Run Code Online (Sandbox Code Playgroud)
其名称如下:
fun scheduleRecurringFetchDataSync() {
Log.d("FETCH_SCHEDULER", "Scheduling started")
val fetchWork = PeriodicWorkRequest.Builder(TestWorker::class.java, 1, TimeUnit.MINUTES)
.setConstraints(constraints())
.build()
WorkManager.getInstance().enqueue(fetchWork)
}
private fun constraints(): Constraints{
return Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresBatteryNotLow(true)
.build()
}
Run Code Online (Sandbox Code Playgroud)
我还有一个UserDao和UserRepository来获取和存储数据.我正在观察UserRepository中的网络数据,如下所示:
class UserRepository (
private val userDao: UserDao,
private val networkDataSource: NetworkDataSource,
private val appExecutors: …Run Code Online (Sandbox Code Playgroud) android kotlin android-livedata android-architecture-components android-workmanager