在 worker 中使用 Livedata 观察器

Using a Livedata observer in a worker

我有一个 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();
    }
}

经过一些研究,我发现如何使用 ListenableWorker

在 WorkManager 中异步执行工作