我想下载数据表单服务器,然后使用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;
}
};
}