Я новичок в Android и изучаю то же самое, разрабатывая простое приложение, которое состоит из одной таблицы Customer, к которой я обращаюсь с помощью базы данных Android Room.
Класс сущности Customer -
@Entity(tableName = "Customers")
public class CustomerEntity {
@PrimaryKey(autoGenerate = true)
private int customerId;
private String customerName;
private String customerAddress;
private String customerZipCode;
private String customerEMailId;
}
Интерфейс Dao клиента -
@Dao
public interface CustomerDao {
@Insert
public void insertCustomer( CustomerEntity customerEntity );
@Update
public void updateCustomer( CustomerEntity customerEntity );
@Delete
public void deleteCustomer( CustomerEntity customerEntity) ;
@Query("SELECT * FROM Customers")
LiveData<List<CustomerEntity>> getAllCustomers();
@Query("SELECT * FROM Customers WHERE customerZipCode == :givenZipCode ")
LiveData<List<CustomerEntity>> getGivenZipCodeCustomer( String givenZipCode);
@Query("SELECT * FROM Customers WHERE customerZipCode == :givenZipCode ")
List<CustomerEntity> getGivenZipCodeCustomerList( String givenZipCode);
@Query("SELECT * FROM Customers WHERE customerZipCode == :givenZipCode ")
Cursor getGivenZipCodeCustomerCursor(String givenZipCode
}
Класс репозитория Customer (показан частично)
public List<CustomerEntity> getGivenZipCodeCustomersList(CustomerEntity customerEntity){
CustomerRepository.CustomerZipCodeAsyncTask customerZipCodeAsyncTask ;
customerZipCodeAsyncTask = new CustomerRepository.CustomerZipCodeAsyncTask( customerDao );
givenZipCodeCustomersList = customerZipCodeAsyncTask.doInBackground( customerEntity );
return givenZipCodeCustomersList ;
}
private static class CustomerZipCodeAsyncTask extends AsyncTask< CustomerEntity ,
Void , List < CustomerEntity > > {
private CustomerDao customerDao;
private CustomerZipCodeAsyncTask ( CustomerDao customerDao ){
this.customerDao = customerDao;
}
@Override
protected List < CustomerEntity > doInBackground(CustomerEntity... customerEntities) {
String zipCode = customerEntities[0].getCustomerZipCode();
return ( customerDao.getGivenZipCodeCustomerList( zipCode ) ) ;
}
}
Когда я пытаюсь получить Список клиентов из другой части приложения, я получаю сообщение
"java.lang.IllegalStateException: Невозможно получить доступ к базе данных в главном потоке, поскольку она может потенциально заблокироватьПользовательский интерфейс в течение длительного периода времени. "
С другой стороны, если я попытаюсь получить Список клиентов, выполнив другой процесс Async, который успешно возвращает Список LiveData, но возвращает null, когда я использую getValue () вLiveData.
В той части приложения, в которой я выполняю эту задачу, я не ожидаю, что извлеченный список изменится, и его не нужно представлять пользователю.Поэтому мне не нужно соблюдать этот список.Мне нужен простой список, из которого я могу получить доступ к элементам списка и обрабатывать их далее.
Я использую Android Studio 3.4 Canary 9, androidx room_version = "2.1.0-alpha03", androix lifecycle_version = "2.0.0"