Использование наблюдателя Livedata в работнике - PullRequest
0 голосов
/ 27 октября 2019

У меня есть служба Worker для отправки простого уведомления. Но теперь я хочу проверить некоторые данные из базы данных перед их отправкой.

Но я не могу использовать наблюдателя в рабочем потоке, он должен быть в основном потоке. У меня ошибка типа java.lang.IllegalStateException: Cannot invoke observeForever on a background thread

Как лучше всего получить доступ к моей базе данных комнат?

public class NotificationWorker extends Worker {

    FavoriteRepository favoriteRepository;

    public NotificationWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
        favoriteRepository = new FavoriteRepository(((MainApplication) context.getApplicationContext()));
    }

    @NonNull
    @Override
    public Result doWork() {

        favoriteRepository.getAllFavorites().observeForever(new Observer<List<Favorite>>() {
            @Override
            public void onChanged(List<Favorite> favorites) {
                // get data
            }
        });
        showNotification("WorkManager", "Content of message");
        return Result.success();
    }
}

1 Ответ

0 голосов
/ 10 ноября 2019

Проведя некоторое исследование, я смог выяснить, как я могу выполнять работу асинхронно в WorkManager, используя ListenableWorker

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...