Требуется замена AsyncTask на RXJava.

Я новичок в Reactive, поэтому полегче со мной, но я пытаюсь заменить асинхронную задачу, которая в настоящее время выполняется при изменении текста, на функцию автоматического предложения. Ниже показано, где я нахожусь с моим RX:

rest.getMemberList(etSearch.getText().toString())//rest interface
                    .subscribeOn(Schedulers.io())
                    .observeOn(RxAndroidSchedulers.mainThread())
                    .subscribe(new Action1<List<Member>>() {
                        @Override
                        public void call(List<Member> results) {
                            ListView ResultsListView = (ListView) findViewById(R.id.list);
                            MemberAdapter = new ResultRowAdapter(mContext, getLayoutInflater());
                            MemberAdapter.setMemberList(results);
                            ResultsListView.setAdapter(MemberAdapter);
                        }
                    };

Итак, я ищу несколько вещей: 1) я иду в правильном направлении с моей наблюдаемой? 2) как бы я справился с частью подписки? 3) любой другой совет, связанный с заменой асинхронных задач на RX, потому что это первый из нескольких, которые мне нужно сделать.

Редактировать:

Это то место, куда я попал и чувствую, что я ближе, но мне все еще нужно руководство. etSearch — это мое представление EditText.

if(etSearch.length()>2){
        Observable<String> o1 = Observable.just(etSearch.getText().toString());

        o1.subscribeOn(Schedulers.io())
                .observeOn(RxAndroidSchedulers.mainThread()).subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                List<Member> MemberList =rest.getMemberList(s);
                ListView ResultsListView = (ListView) findViewById(R.id.list);
                MemberAdapter = new ResultRowAdapter(mContext, getLayoutInflater());
                MemberAdapter.setMemberList(MemberList);
                ResultsListView.setAdapter(MemberAdapter);
            }
        });}

person Will Evers    schedule 29.10.2015    source источник


Ответы (1)


Вот как я это сделал:

Observable<String> o1 = RxTextView.textChangeEvents(etSearch)
                .map(new Func1<RxTextViewTextChangeEvent, String>() {
                         @Override
                         public String call(RxTextViewTextChangeEvent rxTextViewTextChangeEvent) {
                             return etSearch.getText().toString();
                         }
                     }
                );

                        o1.observeOn(RxAndroidSchedulers.mainThread()).filter(new Func1<String, Boolean>() {
                            @Override
                            public Boolean call(String s) {
                                return s.length()>2;
                            }
                        }).subscribe(new Action1<String>() {
                            @Override
                            public void call(String s) {
                                if (s.length() > 2) {
                                    List<Member> MemberList = rest.getMemberList(s);
                                    ListView ResultsListView = (ListView) findViewById(R.id.list);
                                    MemberAdapter = new ResultRowAdapter(mContext, getLayoutInflater());
                                    MemberAdapter.MemberList(MemberList);
                                    ResultsListView.setAdapter(MemberAdapter);
                                }
                            }
                        });
person Will Evers    schedule 29.10.2015