【发布时间】:2019-08-19 11:27:05
【问题描述】:
doWork() 在 Android 中从未调用过 worker 类的方法
我想在连接互联网时将离线数据与服务器同步
//工人管理器类
class UploadWorker (context: Context, workerParameters: WorkerParameters, val authRepository: AuthRepository): Worker(context,workerParameters) {
override fun doWork(): Result {
Log.e("inDo", "work")
GlobalScope.launch {
val resource = authRepository.loginAsync("wmwdwnd@gmail.com", "sdnwnd").await()
when (resource) {
is Resource.Success -> {
Result.success()
Log.e("complete", "ass")
}
is Resource.Error -> {
Result.success()
Log.e("error", "asdd")
//when (resource.code) {}
}
else -> {
Result.success()
}
}
}
return Result.success()
}
}
//查看类
class WorkMnagerActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_work_mnager)
val button = findViewById<Button>(R.id.button2)
button.setOnClickListener {
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
val data = Data.Builder()
.putString("tittle", "")
.build()
val oneTimeWorkRequest = OneTimeWorkRequest.Builder(UploadWorker::class.java)
.setInputData(data)
.setConstraints(constraints)
.build()
WorkManager.getInstance().enqueue(oneTimeWorkRequest);
WorkManager.getInstance().getWorkInfoByIdLiveData(oneTimeWorkRequest.id)
.observe(this, Observer {
it?.let {
if (it.state == WorkInfo.State.ENQUEUED) {
// Show the work state in text view
Log.e("ddd","Download enqueued.")
} else if (it.state == WorkInfo.State.BLOCKED) {
Log.e("ddd","Download blocked")
} else {
Log.e("ddd","Download running.")
}
}
})
}
}
}
【问题讨论】:
-
是正在打印的日志
Log.e("inDo", "work") -
@ManojPerumarath 先生 Log.e() 中没有打印任何内容,即使调试器也无法正常工作
-
尝试从构造函数中移除
val authRepository: AuthRepository参数。 -
@J.D.1731 是的,它采用 doWork 方法,但我想用这种方法将数据发布到服务器。我正在使用 MVVM 模式,我需要 authRespository 类来实现 Web 服务
-
使用任何其他方式提供依赖,构造函数必须没有任何附加参数。如果您使用任何 DI 库,那么不幸的是,您最终会为您的 Worker 提供工厂,参考:android.jlelse.eu/…
标签: android kotlin android-workmanager