这是我第一次进行android开发。对不起,我对所有事情都一无所知。
我正在尝试使用asynctask在活动的主线程上查询一些数据。问题是,在其他一些数据查询中立即需要我查询的数据,因此查询的异步性质意味着每次我需要使用数据时,线程都尚未查询该数据,并给出了nullpointer异常。 有没有办法从房间数据库同步查询数据?
我尝试从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);
}
});
所以我有办法同步查询数据,所以我不知道 空指针异常?
答案 0 :(得分:0)
为什么不这样做
//load current day
findSpecificDayAsyncTask asyncTask = (findSpecificDayAsyncTask) new
findSpecificDayAsyncTask(mDayDao, new findSpecificDayAsyncTask.AsyncResponse() {
@Override
public void processFinish(Day output) {
day1 = output;
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);
}
});
}
}).execute(date);