需要使用RXJava替换AsyncTask的帮助 [英] AsyncTask replacement with RXJava help needed
问题描述
我是Reactive的新手,所以我可以轻松一点,但是我试图替换当前在文本更改上运行的异步任务,以实现自动建议功能.以下是我使用RX的位置:
I am new to Reactive so go easy on me, but I am trying to replace an async task that is currently run on text changes for an auto suggest function. Below is where I am at with my 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取代异步任务有关的建议,因为这是我需要做的第一个建议.
So, what Im looking for is a few things: 1) am I going in the right direction with my observable? 2)how would I handle the subscription part of this? 3)any other advice related to replacing async tasks with RX because this is the first of several I need to do.
这是我感觉已经接近的地方,但是我仍然需要指导.etSearch是我的EditText视图
This is where I have gotten and feel as if I am closer, but I still need guidance.etSearch is my EditText view
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);
}
});}
推荐答案
这就是我的方法.不用了,谢谢StackOverflow哈哈:
This is how I did it. Thanks for nothing StackOverflow haha:
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);
}
}
});
这篇关于需要使用RXJava替换AsyncTask的帮助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!