Я новичок в новом компоненте архитектуры WorkManager, я выполняю вызовы API через Retrofit и RxJava.
Мой вариант использования здесь - получать новые сообщения из Backend, затем показывать уведомление и обновлять виджет.
Таким образом, код внутри метода doWork () из класса Worker может выглядеть примерно так.
@NonNull
@Override
public Result doWork() {
AppDependencies appDependencies = new AppDependencies((Application) getApplicationContext());
Repository repository = appDependencies.getRepository();
repository.getNewPosts()
.flatMap(newPosts -> repository.inserPosts(newPosts).toObservable())
.doOnError(Timber::e)
//if success - > return Result.SUCCESS,
// -> show notification
// -> update widget
// error-> return Result.Failure
.dontKnowWhatBestNextThing; //blocking or subscribing
//if we reached here then Retry
return Result.RETRY;
}
Мой вопрос: как правильно использовать код RxJava внутри рабочего класса, потому что метод doWork () имеет возвращаемое значение, поэтому мне нужно сделать код Rx синхронным.
если я использую неблокирующий подход Rx, как я могу вернуть значение (Успех - Отказ - Повторить)
onError
илиonSuccess
, и, поскольку мы знаем, что любое из условий работает и, вероятно, является последним в цепочке, внутри фигурных скобок выполняется ваша работа, а в последней строке вернуть соответствующий статус вWorkManager
- person Debdeep   schedule 09.08.2018Application
путем приведения контекста приложения не гарантируется. В основном я видел, как он терпит неудачу в эмуляторах, но также очень редко на реальных устройствах. Безопаснее установить статическое поле вonCreate
приложения и предоставить статический получатель. - person StackOverthrow   schedule 09.08.2018