Я думал, что после рекомендуемого Realm подход для выполнения вставки данных ASync так:Ваш Realm открывается из потока без Looper
public void addCustomer(final Customer customer) {
Realm insertRealm = Realm.getDefaultInstance();
insertRealm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm backgroundRealm) {
long id = customerPrimaryKey.incrementAndGet();
customer.setId(id);
backgroundRealm.copyToRealm(customer);
}
}, new Realm.Transaction.OnSuccess() {
@Override
public void onSuccess() {
Log.d(LOG_TAG, "Customer Added");
}
}, new Realm.Transaction.OnError() {
@Override
public void onError(Throwable error) {
Log.d(LOG_TAG, error.getMessage());
}
});
insertRealm.close();
}
Однако, когда я запускаю приведенный выше код я получаю «Your Realm открывается из потока без Looper, и вы предоставили обратный вызов, нам нужен обработчик для вызова вашего обратного вызова »
Я запускаю этот код в классе без активности, что я делаю неправильно здесь и как я могу исправить Это. Благодарю.
Update - Фиксированные Оказывается, что нет ничего плохого в запросе, проблема заключается в том, что я звала его из IntentService. Я пытался засеять базу данных на приложение первого запуска, так что я установил это так:
protected void onHandleIntent(Intent intent) {
Realm realm = Realm.getDefaultInstance();
//Add sample Customers to database
List<Customer> customers = SampleCustomerData.getCustomers();
realm.beginTransaction();
for (Customer customer: customers){
customer.setId(customerPrimaryKey.getAndIncrement());
realm.copyToRealm(customer);
}
realm.commitTransaction();
realm.close();
}
То фиксирована, вне IntentService, запрос отлично работает при вызове из UI Thread.
Это вызвано из класса Presenter. Я не начинал нить, я верю, что в Realm вращается собственный поток для выполнения асинхронного запроса. –