Middle
Hoe gegevens verzenden en ontvangen vanuit WorkManager?
sobes.tech AI
Antwoord van AI
Om gegevens over te dragen in WorkManager, gebruik je Data, die je in WorkRequest plaatst. Om gegevens uit WorkManager te krijgen, geeft de worker een Result terug met Data.
// Gegevens doorgeven bij het maken van WorkRequest
val inputData = workDataOf(
"KEY_STRING" to "Stringwaarde",
"KEY_INT" to 123
)
val uploadWorkRequest: WorkRequest =
OneTimeWorkRequestBuilder<MyWorker>()
.setInputData(inputData)
.build()
WorkManager.getInstance(context).enqueue(uploadWorkRequest)
// Gegevens ophalen binnen de Worker
class MyWorker(appContext: Context, workerParams: WorkerParameters):
Worker(appContext, workerParams) {
override fun doWork(): Result {
// Inkomende gegevens ophalen
val stringData = inputData.getString("KEY_STRING")
val intData = inputData.getInt("KEY_INT", 0) // Standaardwaarde
// ... werk uitvoeren ...
// Uitgaande gegevens (resultaat van het werk) doorgeven
val outputData = workDataOf(
"KEY_RESULT" to "Werk succesvol voltooid",
"KEY_ERROR" to false
)
return Result.success(outputData)
// Of Result.failure() / Result.retry()
}
}
// Gegevens uit WorkManager ophalen (bijvoorbeeld in Activity/Fragment)
WorkManager.getInstance(context)
.getWorkInfoByIdLiveData(uploadWorkRequest.id)
.observe(viewLifecycleOwner, Observer { workInfo ->
if (workInfo != null && workInfo.state == WorkInfo.State.SUCCEEDED) {
val resultData = workInfo.outputData
val resultString = resultData.getString("KEY_RESULT")
val resultError = resultData.getBoolean("KEY_ERROR", true)
// Verwerk de ontvangen gegevens
}
})