Мне необходимо :
- Получить некоторые данные из API в фоновом потоке
- Отображение данных в пользовательском интерфейсе
Сохранить в Realm.
fetchItemsFromServer().subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<ItemList>() { @Override public void call(ItemList items) { displayItems(items); try { realm.beginTransaction(); realm.copyToRealmOrUpdate(itemList); realm.commitTransaction(); Logger.v("Realm ", "Copied list object to realm"); } catch (Exception e) { Logger.e("Realm Something went wrong ", e); realm.cancelTransaction(); } } }
Это вызывает ошибку: доступ к области из неправильного потока
У меня есть 4 вкладки, получающие разные сообщения одновременно.
fetchItemsFromServer() — это интенсивный вызов, и ограничивать этот вызов одним потоком нехорошо. Мне нужна эта гибкость.
Кто-нибудь нашел обходные пути, используя область таким образом?
Например, большинство примеров, как правило, сосредоточены на выборке из Realm, а не на работе с сетевыми операциями:
Пример ниже:
Rxjava — https://realm.io/news/realm-java-0.87.0/
Использование области с RxJava — https://realm.io/news/using-realm-with-rxjava/ (предыдущее решение, но с недостатками производительности)
My Realm предоставляется модулем базы данных посредством внедрения зависимостей (Dagger 2)
@Module
public class DatabaseModule {
public static final String REALM_FILE_NAME = "Realm name";
@Provides
Realm providesRealmInstance(Context context) {
return Realm.getInstance(
new RealmConfiguration.Builder(context)
.name(REALM_FILE_NAME)
.build());
}
}
subscribeOn(Schedulers.io())
не должно повлиять на вашего подписчика, так как выobserveOn
основной поток. ВашfetchItemsFromServer()
каким-то образом использует Realm? - person Christian Melchior   schedule 15.01.2016setDefaultConfiguration
в своем классеApplication
и используяRealm.getDefaultInstance()
для создания экземпляра. - person Christian Melchior   schedule 15.01.2016