使用我的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;
}
}
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
});