如何通过传入参数从AsyncTask检索对象列表?

问题描述 投票:0回答:1

使用我的PhoneNumbersDao中的以下声明:

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

如何在AsyncTask中创建一个方法以异步方式进入数据库并检索与我传入的contactId相匹配的所有PhoneNumber对象?下面的代码是到目前为止的内容,但是我确定要将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;
        }
    }
android android-asynctask android-room
1个回答
0
投票
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;
    }
}

此异步应执行的操作(插入新的电话号码),因此将类名称更改为InsertPhoneNumAsyncTask为了获取电话号码,您可以使用LiveData

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

然后您可以像这样在活动或片段中观察它

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

     //update your UI here
    });
© www.soinside.com 2019 - 2024. All rights reserved.