使用Android Room立即查询并更新到对象

时间:2019-02-23 21:25:10

标签: android android-room rx-android

我想下载数据表单服务器,然后使用room做Insert / Update对象,最后返回值进行查看。但是,如何执行从改造到db的操作,最后立即返回对象以进行查看?

不使用查询更新,因为对象有太多参数,或者有更好的主意吗?

翻新回调中的对象列表:

.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;
        }
    };
}

0 个答案:

没有答案