无法使用rxJava2

时间:2018-10-05 07:09:37

标签: android rx-java2

将数据插入本地数据库时遇到了问题。 我有以下场景。如果本地数据库中有数据,则从本地数据库中获取数据;如果不存在数据,则进行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();
                }));
    }

0 个答案:

没有答案