我正在尝试使用 maybe/Flowable 从房间获取数据,它什么都不返回,但是如果我尝试使用 AsyncTask,它会返回数据。
这里是我的查询:
@Query("SELECT * FROM Media WHERE path LIKE :path")
Maybe<Media> getMediaByPathTest(String path);
和 Activity 中的代码:
AppDatabase.getInstance(getActivity()).mediaDao()
.getMediaByPathTest(getCurrentMedia().getPath())
.observeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe(media -> {
if (media != null && media.isFavourite()) {
Toast.makeText(SingleMediaActivity.this,
"Bingo I m favorite", Toast.LENGTH_SHORT).show();
}
}, throwable -> {
}
, () -> {
});
显示错误
W/System.err: java.lang.IllegalStateException: 无法访问主线程上的数据库,因为它可能会长时间锁定 UI。
我做错了什么以及如何做对?
最佳答案
您切换了 observeOn 和 subscribeOn。您订阅了主线程(阻止您访问数据库)。只需切换那些:
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
关于android - 也许在房间里不返回数据,但如果我用 asynctask 查询它返回数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47712243/