Невозможно вставить все данные в базу данных, используя rxJava2 - PullRequest
0 голосов
/ 05 октября 2018

Я столкнулся с проблемой при вставке данных в локальную базу данных.у меня есть следующий scenerio.когда данные находятся в локальной базе данных, извлеките данные из локальной базы данных, если данных нет, сделайте вызов 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();
                }));
    }
...