Я работаю с RxJava + Realm и хотел бы сделать что-то, что кажется довольно простой:Transform RealmResult в одном фоновом потоке с RxJava
Я хочу, чтобы загрузить все RealmObjects, которые соответствуют определенным критериям, преобразование каждого из RealmResult объекты, а затем уведомлять основной поток, когда эти преобразованные объекты готовы. Причина, по которой мне нужно преобразование в фоновом потоке, а также длительная работа, если в RealmResults имеется большое количество объектов
Проблема в том, что я могу загрузить объекты в фоновом режиме , но не может ничего сделать с каждым из объектов, все еще находясь в фоновом потоке. Я также пытаюсь сделать это в реактивной манере.
код до сих пор:
groupContactSubscription = realm.where(GroupContact.class)
.equalTo(MODEL_ID, mGroupId)
.findAllAsync()
.asObservable()
.filter(new Func1<RealmResults<GroupContact>, Boolean>() {
@Override
public Boolean call(RealmResults<GroupContact> groupContacts) {
return groupContacts.isLoaded();
}
})
.first()
.map(new Func1<RealmResults<GroupContact>, List<Contact>>() {
@Override
public List<Contact> call(RealmResults<GroupContact> groupContacts) {
List<Contact> contacts = new ArrayList<>();
//Transform each GroupContact
for(int i=0; i<groupContacts.size(); ++i){
contacts.add(transformGroupContact(groupContacts.get(0))
}
return contacts;
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<List<Contact>>() {
@Override
public void call(List<Contact> contacts) {
// Deal with transformed objects
}
});
Проблема в том, что это не происходит в фоновом потоке (она по-прежнему блокирует основной поток).
Я не совсем уверен, как это должно быть сделано чисто, может ли кто-нибудь указать мне в правильном направлении, что случилось с тем, что у меня уже есть? Я считаю, что транзакция Realm происходит асинхронно, а filter-> map также происходит на том же фоновом потоке. Ясно, что это не так.
Это моя попытка, используя RxJava поэтому, пожалуйста, будьте добры
Вы считали * не * преобразование набора результатов и, таким образом, устранение необходимости считывать * каждый отдельный элемент набора результатов * из базы данных, а вместо этого вместо этого использовать возможности ленивой загрузки Realm? Просто интересуюсь. – EpicPandaForce