如何从会议室数据库同步查询数据?

时间:2019-05-09 01:27:55

标签: java android android-asynctask android-room

这是我第一次进行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);
            }
        });

所以我有办法同步查询数据,所以我不知道 空指针异常?

1 个答案:

答案 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);