Как синхронно запрашивать данные из базы данных комнаты? - PullRequest
0 голосов
/ 09 мая 2019

Это мой первый раз, когда я занимаюсь разработкой Android.Извините за отсутствие знаний в ... обо всем.

Я пытаюсь запросить некоторые данные в главном потоке деятельности, используя asynctask.Проблема в том, что запрашиваемые мною данные нужны немедленно в каком-то другом запросе данных, поэтому асинхронный характер запроса означает, что каждый раз, когда мне нужно использовать данные, поток еще не запрашивал их и выдает исключение нулевого указателя.Есть ли способ синхронно запрашивать данные из базы данных комнаты?

Я пробовал функцию getValue () из объекта LiveData, но он также всегда возвращает ноль.Я уверен, что данные правильно вставлены в базу данных, я проверял несколько раз, просматривая базу данных во время отладки.

Это код, который я использовал для запроса сущности класса 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 голосов
/ 09 мая 2019

Почему бы не сделать это

    //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);
...