Толист не излучает в rxjava - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь отфильтровать список после получения входных данных от edittext, на самом деле это фильтрация списка, но я хочу сгруппировать результат в список.

Так что я использовал для перечисления оператора с SingleObserver, но результат не приходит;почему это?

RxTextView.textChangeEvents(searchEdit)
                .skip(1)
                .debounce(400, TimeUnit.MILLISECONDS)
                .switchMap(new Function<TextViewTextChangeEvent, Observable<List<VehicleMakeModel>>>() {
                    @Override
                    public Observable<List<VehicleMakeModel>> apply(TextViewTextChangeEvent textViewTextChangeEvent) throws Exception {
                        return Observable.just(variantlist);
                    }
                })
                .flatMapIterable(new Function<List<VehicleMakeModel>, List<VehicleMakeModel>>() {
                    @Override
                    public List<VehicleMakeModel> apply(List<VehicleMakeModel> v) {
                        return v;
                    }
                })
                .filter(new Predicate<VehicleMakeModel>() {
                    @Override
                    public boolean test(VehicleMakeModel v) {
                        if (searchEdit.getText().toString().isEmpty())
                            return true;
                        else
                            return v.getVariant().toLowerCase().trim().contains(searchEdit.getText().toString().toLowerCase().trim());

                    }
                })
                .map(new Function<VehicleMakeModel, VehicleMakeModel>() {
                    @Override
                    public VehicleMakeModel apply(VehicleMakeModel integer) throws Exception {
                        return integer;

                    }
                })
                .toList()
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new SingleObserver<List<VehicleMakeModel>>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onSuccess(List<VehicleMakeModel> vehicleMakeModels) {
                        System.out.println("testing");

                    }

                    @Override
                    public void onError(Throwable e) {

                    }
                });

1 Ответ

0 голосов
/ 07 мая 2019

Об RxBinding необходимо помнить один факт: наблюдаемые события никогда не завершаются.

RxTextView.textChangeEvents(searchEdit) никогда не вызовет полный обратный вызов, поэтому toList() никогда не вернет ожидаемый список.

Это не ошибка, а желаемое поведение для RxBinding, потому что ваша наблюдаемая textChanges никогда не прекратит прослушивание этого события.

...