Sobes.tech
Middle

Hogyan adjuk vissza a WorkManager munkájának eredményét az alkalmazásnak?

sobes.tech MI

Válasz az MI-től

Használhat Observer-t egy LiveData<WorkInfo> vagy LiveData<List<WorkInfo>> objektumon, amelyet a WorkManager-ből szerezhetünk id vagy címke szerint. A WorkInfo-ban található egy outputData mező, amelyben az eredmény tárolva van.

Példa LiveData lekérésére:

// `LiveData` lekérése id szerint
val workInfoByIdLiveData: LiveData<WorkInfo> =
    WorkManager.getInstance(context).getWorkInfoByIdLiveData(workId)

// `LiveData` lekérése címke szerint
val workInfoByTagLiveData: LiveData<List<WorkInfo>> =
    WorkManager.getInstance(context).getWorkInfosByTagLiveData(tag)

Eredmény figyelésének példája:

// `LiveData<WorkInfo>` figyelése
workInfoByIdLiveData.observe(lifecycleOwner, Observer { workInfo ->
    if (workInfo != null && workInfo.state.isFinished) {
        val resultData = workInfo.outputData
        // Eredmény feldolgozása
    }
})

A Worker-en belül az eredményt a Result.success(Data)-val adjuk vissza.

class MyWorker(appContext: Context, workerParams: WorkerParameters):
    Worker(appContext, workerParams) {

    override fun doWork(): Result {
        // Háttérmunka végrehajtása
        val outputData = Data.Builder()
            .putString("result_key", "Siker!")
            .build()
        return Result.success(outputData)
    }
}