将数据插入本地数据库时遇到了问题。 我有以下场景。如果本地数据库中有数据,则从本地数据库中获取数据;如果不存在数据,则进行API调用,然后将该对象插入本地存储中。
注意:我从API列表中获取数据。我已经尝试过了,但是只能将一个数据插入本地数据库
@Override
public void getEventDetail(JSONObject jsonObject) {
Single<List<EventDetailResponse>> getAllEventFromLocalDb = getDataManager().getAllEventDetail();
Single<List<EventDetailResponse>> getEventFromNetwork = getDataManager().doEventDetailCall(jsonObject);
Flowable<List<EventDetailResponse>> response = Single.concat(getAllEventFromLocalDb, getEventFromNetwork);
FlattenTransform<EventDetailResponse> flattenList = new FlattenTransform<EventDetailResponse>();
getCompositeDisposable().add(
(response)
.filter(list -> !list.isEmpty())
.first(new ArrayList<>())
.map(list->{
if(!list.isEmpty()){
for (int i=0;i<list.size();i++){
insertEventIntoLocalStorage(list.get(i));
}
}
return list;
})
.subscribeOn(getSchedulerProvider().io())
.observeOn(getSchedulerProvider().ui())
.subscribe(s->{
}));
}
public void insertEventIntoLocalStorage(EventDetailResponse eventDetailResponse) {
getCompositeDisposable().add(getDataManager()
.insertEventDetail(eventDetailResponse)
.subscribeOn(getSchedulerProvider().io())
.observeOn(getSchedulerProvider().ui())
.subscribe(aLong -> {
Log.e("data","data inserted");
}, throwable -> {
handleError(throwable);
}));
}
我有逻辑!希望对您有所帮助:我正在编辑以下代码。除了这个赞赏之外,任何好的答案
向服务器发送请求以查找数据:
@Override
public void getEventDetail(JSONObject jsonObject) {
getCompositeDisposable().add(
(getDataManager().doEventDetailCall(jsonObject))
.subscribeOn(getSchedulerProvider().io())
.observeOn(getSchedulerProvider().ui())
.subscribe(list->{
if(!list.isEmpty()){
insertEventIntoLocalStorage(list);
}
}));
}
当我们收到来自网络的响应时,将数据插入数据库:
public void insertEventIntoLocalStorage(List<EventDetailResponse> eventDetailResponse) {
getCompositeDisposable().add(getDataManager()
.insertEventDetail(eventDetailResponse)
.subscribeOn(getSchedulerProvider().io())
.observeOn(getSchedulerProvider().ui())
.subscribe(aLong -> {
loadDataFromDb();
}, throwable -> {
handleError(throwable);
}));
}
最后从数据库加载数据
@Override
public void loadDataFromDb() {
getMvpView().showLoading();
getCompositeDisposable().add(getDataManager()
.getAllEventDetail()
.subscribeOn(getSchedulerProvider().io())
.observeOn(getSchedulerProvider().ui())
.subscribe(result->{
getMvpView().showEventDetailFromDb(result);
getMvpView().hideLoading();
},throwable -> {
handleError(throwable);
getMvpView().hideLoading();
}));
}