Middle
Come inviare e ricevere dati da WorkManager?
sobes.tech AI
Risposta dell'AI
Per trasmettere dati in WorkManager, usi Data, che inserisci in WorkRequest. Per ottenere dati da WorkManager, il worker restituisce un Result con Data.
// Trasmettere dati durante la creazione di WorkRequest
val inputData = workDataOf(
"KEY_STRING" to "Valore stringa",
"KEY_INT" to 123
)
val uploadWorkRequest: WorkRequest =
OneTimeWorkRequestBuilder<MyWorker>()
.setInputData(inputData)
.build()
WorkManager.getInstance(context).enqueue(uploadWorkRequest)
// Ottenere dati all'interno del Worker
class MyWorker(appContext: Context, workerParams: WorkerParameters):
Worker(appContext, workerParams) {
override fun doWork(): Result {
// Ottenere i dati di input
val stringData = inputData.getString("KEY_STRING")
val intData = inputData.getInt("KEY_INT", 0) // Valore di default
// ... eseguire il lavoro ...
// Trasmettere i dati di output (risultato del lavoro)
val outputData = workDataOf(
"KEY_RESULT" to "Lavoro completato con successo",
"KEY_ERROR" to false
)
return Result.success(outputData)
// O Result.failure() / Result.retry()
}
}
// Ottenere i dati di output da WorkManager (ad esempio, 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)
// Elaborare i dati ricevuti
}
})