पर आधारित चेनिंग अवलोकन योग्य मैं आरएक्स-जावा और आरएक्स-एंड्रॉइड पर एक पूर्ण शुरुआत कर रहा हूं। मैंने सुना है कि सीखने की अवस्था शुरुआत में काफी खड़ी है।परिणाम
मैं सभी इवेंटबस आधारित कोड को आरएक्स-एंड्रॉइड का उपयोग कर एक और प्रकार के विकल्प में बदलने की कोशिश कर रहा हूं।
मैं पाठ संपादित पाठ परिवर्तन की घटनाओं से observables बनाने के लिए इस स्निपेट सेट किया है:
MainActivity
RxUtils.createEditTextChangeObservable(txtInput).throttleLast(200, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread()).subscribe(new Action1<EditText>() {
@Override
public void call(EditText editText) {
searchStopResultFragment.query(editText.getText().toString());
}
});
RxUtils:
public static Observable<EditText> createEditTextChangeObservable(final EditText editText){
return Observable.create(new Observable.OnSubscribe<EditText>() {
@Override
public void call(final Subscriber<? super EditText> subscriber) {
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (subscriber.isUnsubscribed()) return;
subscriber.onNext(editText);
}
});
}
});
}
SearchStopResultFragment:
public void query(String query){
lastQuery = query;
resultObservable = StopProvider.getStopResultObservable(getActivity().getContentResolver(),query);
subscription = resultObservable.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<List<Stop>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<Stop> stops) {
if(!lastQuery.equals("")) {
if(stops.size()>0) {
ArrayList<AdapterItem> items = adapter.getItems();
items.clear();
for (Stop stop : stops) {
SearchResultStopItem item = new SearchResultStopItem(stop, SearchResultStopItem.STOP);
items.add(item);
}
adapter.setItems(items);
adapter.notifyDataSetChanged();
}else{
//DO A NOTHER ASYNC QUERY TO FETCH RESULTS
}
}else{
showStartItems();
}
}
});
}
ऐसा लगता है कि मैं यह गलत कर रहा हूं। मैं प्रत्येक पाठ परिवर्तन घटना पर अपने खंड में क्वेरी विधि से नए अवलोकन करता हूं। मैं StopProvider.getStopResultObservable
में परिणाम के आधार पर एक नया एसिंक लुकअप ऑपरेशन भी बनाना चाहता हूं (टिप्पणी देखें)
कोई भी मामला?
अपनी क्वेरी() विधि को एक अवलोकन करने योग्य बनाएं और प्रश्नों के साथ श्रृंखला संपादन टेक्स्ट घटनाओं के लिए flatMap का उपयोग करें – krp