Sobes.tech
Middle

Πώς να στείλετε και να λάβετε δεδομένα από το WorkManager;

sobes.tech AI

Απάντηση από AI

Για τη μεταφορά δεδομένων στο WorkManager, χρησιμοποιείτε το Data, το οποίο το τοποθετείτε στο WorkRequest. Για την λήψη δεδομένων από το WorkManager, ο worker επιστρέφει ένα Result με Data.

// Μεταφορά δεδομένων κατά τη δημιουργία του WorkRequest
val inputData = workDataOf(
    "KEY_STRING" to "Τιμή συμβολοσειράς",
    "KEY_INT" to 123
)

val uploadWorkRequest: WorkRequest =
   OneTimeWorkRequestBuilder<MyWorker>()
       .setInputData(inputData)
       .build()

WorkManager.getInstance(context).enqueue(uploadWorkRequest)
// Λήψη δεδομένων μέσα στον Worker
class MyWorker(appContext: Context, workerParams: WorkerParameters):
    Worker(appContext, workerParams) {

    override fun doWork(): Result {
        // Λήψη εισερχόμενων δεδομένων
        val stringData = inputData.getString("KEY_STRING")
        val intData = inputData.getInt("KEY_INT", 0) // Προεπιλεγμένη τιμή

        // ... εκτέλεση εργασίας ...

        // Μεταφορά δεδομένων εξόδου (αποτέλεσμα εργασίας)
        val outputData = workDataOf(
            "KEY_RESULT" to "Η εργασία ολοκληρώθηκε με επιτυχία",
            "KEY_ERROR" to false
        )

        return Result.success(outputData)

        // Ή Result.failure() / Result.retry()
    }
}
// Λήψη δεδομένων εξόδου από το WorkManager (π.χ. σε 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)
            // Επεξεργασία των ληφθέντων δεδομένων
        }
    })