Я хочу загрузить данные с сервера форм, затем выполнить Insert
/ Update
объекты, используя комнату, и, наконец, вернуть значение для просмотра.Но как сделать вещи от модернизации до БД и, наконец, немедленно вернуть объекты для просмотра?
Не используется обновление запроса, потому что объект имеет слишком много параметров или есть какая-то лучшая идея?
Список объектов из обратного вызова модификации:
.subscribe(new SingleObserver<List<FooResponse>>() {
@Override
public void onSuccess(List<FooResponse> fooResponseList) {
//handle data storing
fooCallback.setValue(foo);
} else {
fooCallback.setValue(new HashMap<Foo, String>());
}
}
Идея хранения как:
private Map<Foo, String> updateFoo(List<FooResponse> responseList, String fooMode) {
Map<Foo, String> foos = new LinkedHashMap<>();
for (FooResponse fooResponse : responseList) {
Integer fooId = fooResponse.getId();
if (fooId != null) {
FooDao fooDao = database.fooDao();
Foo oldFoo = fooDao.queryById(fooResponse.getId());
final Foo newFoo;
if (oldFoo != null) {
fooDao.update(newFoo);
} else {
fooDao.insertOrReplace(newFoo);
}
Foo foo = fooDao.queryById(fooId);
foos.put(foo, fooMode);
}
}
return foos;
}
Что я пробовал:
private Callable<Map<Foo, String>> storeReviewFooTest(final List<FooResponse> fooResponseList, final Integer parentId, final String fooMode) {
return new Callable<Map<Foo, String>>() {
@Override
public Map<Foo, String> call() throws Exception {
final Map<Foo, String> foos = new LinkedHashMap<>();
for (final FooResponse fooResponse : fooResponseList) {
final Integer fooId = fooResponse.getId();
if (fooId != null) {
final FooDao fooDao = database.fooDao();
fooDao.queryByIdFlowable(fooId))
.subscribeOn(Schedulers.from(database.getDbThread()))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Foo>(){
@Override
public void accept(Foo foo) throws Exception {
FooDao fooDao = database.fooDao();
final Foo newFoo;
if (oldFoo != null) {
newFoo = parseFooData(oldFoo, fooResponse);
fooDao.update(newFoo);
} else {
newFoo = parseFooData(new Foo(), fooResponse);
oldFoo.setParentId(parentId);
fooDao.insertOrReplace(newFoo);
}
}
});
}
}
return foos;
}
};
}