Как получить список объектов из AsyncTask, передав параметр? - PullRequest
0 голосов
/ 14 апреля 2020

Используя приведенный ниже оператор из моего PhoneNumbersDao:

    // Retrieve entry/entries by contact ID
    @Query("SELECT * FROM phone_numbers_table WHERE contact_id = :contactId")
    List<PhoneNumber> getPhoneNumbersById(long contactId);

Как я могу создать метод в моем AsyncTask для асинхронного входа в базу данных и извлечения всех объектов PhoneNumber, которые соответствуют contactId, который я передаю внутрь? Код ниже - это то, что у меня есть, но я уверен, что мне нужно передать contactId:

private static class SelectPhoneNumberByIdAsyncTask extends AsyncTask<PhoneNumber, Void, Void> {

        private PhoneNumberDao phoneNumberDao;

        private SelectPhoneNumberByIdAsyncTask(PhoneNumberDao phoneNumberDao) {
            this.phoneNumberDao = phoneNumberDao;
        }

        @Override
        protected Void doInBackground(PhoneNumber... phoneNumbers) {
            phoneNumberDao.insert(phoneNumbers[0]);
            return null;
        }
    }

Я сейчас звоню observe(), как показано:

WorksideDatabase database = WorksideDatabase.getInstance(getApplication());
            PhoneNumberDao phoneNumberDao = database.phoneNumberDao();

            phoneNumberDao.getPhoneNumbersById(contactID).observe(this, PhoneNumber-> {


            });

1 Ответ

0 голосов
/ 14 апреля 2020
private static class SelectPhoneNumberByIdAsyncTask extends AsyncTask<PhoneNumber, Void, Void> {

    private PhoneNumberDao phoneNumberDao;

    private SelectPhoneNumberByIdAsyncTask(PhoneNumberDao phoneNumberDao) {
        this.phoneNumberDao = phoneNumberDao;
    }

    @Override
    protected Void doInBackground(PhoneNumber... phoneNumbers) {
        phoneNumberDao.insert(phoneNumbers[0]);
        return null;
    }
}

Этот Asyn c должен сделать одну вещь (вставить новый номер телефона), поэтому измените имя класса на InsertPhoneNumAsyncTask. И для получения телефонных номеров вы можете использовать LiveData

 @Query("SELECT * FROM phone_numbers_table WHERE contact_id = :contactId")
LiveData<List<PhoneNumber>> getPhoneNumbersById(long contactId);

, тогда вы сможете наблюдать это в вашей деятельности или фрагменте, как это

getPhoneNumbersById(contactId).observe(this, new Observer<List<PhoneNumber>>() {
        @Override
        public void onChanged(@Nullable List<PhoneNumber> numbers) {
            //here you access the returned numbers
        }
    });

Проверьте эту надежду, это поможет вам

...