Запрос и обновление немедленно к объекту с помощью Android Room - PullRequest
0 голосов
/ 24 февраля 2019

Я хочу загрузить данные с сервера форм, затем выполнить 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;
        }
    };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...