【发布时间】:2019-05-09 01:27:55
【问题描述】:
这是我第一次做安卓开发。对不起,我对……一切都缺乏了解。
我正在尝试使用 asynctask 在活动的主线程上查询一些数据。问题是,我查询的数据在其他一些数据查询中是立即需要的,所以查询的异步性意味着每次我需要使用数据时,线程还没有查询到它并给出了一个空指针异常。 有没有办法从房间数据库中同步查询数据?
我尝试了 LiveData 对象的 getValue() 函数,但它也总是返回 null。我确信数据已正确插入数据库中,我在调试时检查了多次查看数据库。
这是我用来查询Day类实体的代码:
//load current day
findSpecificDayAsyncTask asyncTask = (findSpecificDayAsyncTask) new findSpecificDayAsyncTask(mDayDao, new findSpecificDayAsyncTask.AsyncResponse() {
@Override
public void processFinish(Day output) {
day1 = output;
}
}).execute(date);
它在适当的时候工作,但我需要立即数据以便我可以查询 其他一些数据:
mBPViewModel = ViewModelProviders.of(this).get(BulletPointViewModel.class);
//the day1 class is used here as a parameter
mBPViewModel.getSpecificDayBulletPoints(day1.day).observe(this, new Observer<List<BulletPoint>>() {
@Override
public void onChanged(@Nullable final List<BulletPoint> bulletPoints) {
// Update the cached copy of the words in the adapter.
mAdapter.setBulletPoints(bulletPoints);
}
});
那么有没有办法让我同步查询数据,所以我没有得到 空指针异常?
【问题讨论】:
-
您是否考虑过使用 Executor(线程池)而不是 AsyncTask?
-
@MohammadL 不,我没有,老实说,直到你提到它,我才知道这件事。你知道任何关于如何使用它的好教程吗?还有,如果你一次执行多个任务,是保证它们都被执行了,还是最快的任务先完成?
标签: java android android-asynctask android-room