任何帮助表示赞赏!!!用户第一次进入屏幕时,检查数据是否在本地存储中可用,如果不是,则从网络请求数据,然后转储到本地存储中;如果数据在本地存储中可用,则显示来自本地的数据。本地存储。 我的问题是,在进行网络调用时,我以列表的形式从服务器获得响应,并且我想将数据插入到本地存储中,这是网络结果中期望的对象。我如何才能做到这一点。我的尝试
@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);
getCompositeDisposable().add(response
.filter(list -> !list.isEmpty()).first(new ArrayList<>())
.subscribeOn(getSchedulerProvider().io())
.observeOn(getSchedulerProvider().ui())
.subscribe(list->{
Log.e("sizee",""+list.size());
},throwable -> {handleError(throwable);}));
}
从网络中获取数据时,我的列表大小非常合适。在可观察的下方,我必须在上方调用并在onsubscribe中获得一次结果。
public Observable<Long> insertEventDetail(EventDetailResponse eventDetailResponse) {
return Observable.fromCallable(new Callable<Long>() {
@Override
public Long call() throws Exception {
return mDaoSession.getEventDetailResponseDao().insert(eventDetailResponse);
}
});
}
答案 0 :(得分:0)
您需要使用flatMapIterable
来迭代列表中的每个项目。请记住,flatMapIterable
不遵守列表中的原始顺序。如果需要保留订单,请使用concatMapIterable
:
getCompositeDisposable().add(response
.filter(list -> !list.isEmpty())
.flatMapIterable(x -> x)
.subscribeOn(getSchedulerProvider().io())
.observeOn(getSchedulerProvider().ui())
.subscribe(item -> {
insertEventDetail(item);
Log.e("sizee",""+list.size());
},throwable -> {handleError(throwable);}));