Успешная реализация Worker на основе событий liveData - PullRequest
0 голосов
/ 22 октября 2018

Звучит как обычная вещь, но я не могу понять, как этого добиться.У меня есть класс Worker, который выполняет некоторые задачи.

@NonNull
    @Override
    public Worker.Result doWork() {
        //Some work that involves liveData 
        return Worker.Result.SUCCESS;
    }

@Override
    public void onChanged(@Nullable String s) {    
        if(//Something){
            //If this happens only then should the Worker return success
        }else{
            //Else return Failure/Retry
        }
    }

Я хочу вернуть успех на основе значений, возвращенных liveData, который у меня есть.Я не могу понять, как это сделать.Может кто-нибудь направить меня.Спасибо !!

1 Ответ

0 голосов
/ 22 октября 2018

Использование CountDownLatch может исправить проблему для Асинхронные вызовы в Worker:

final WorkerResult[] result = {WorkerResult.RETRY};
CountDownLatch countDownLatch = new CountDownLatch(1);    

@NonNull
@Override
public Worker.Result doWork() {
    //Some work that involves liveData 
    try {
        countDownLatch.await(); // This will make our thread to wait for exact one time before count downs
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return result[0];
}

@Override
public void onChanged(@Nullable String s) {    
    if(//Something){
        //If this happens only then should the Worker return success
        result[0] = WorkerResult.SUCCESS;
    }else{
        //Else return Failure/Retry
        result[0] = WorkerResult.RETRY;
    }
    countDownLatch.countDown(); // This will count down our latch exactly one time & then our thread will continue
}

Оформить заказ из здесь

...