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)
// Επεξεργασία των ληφθέντων δεδομένων
}
})