Sobes.tech
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
        }
    })