エディットテキスト検索のデバウンス操作にrxandroidを使用しました
使った
private void setUpText() {
_mSubscription = RxTextView.textChangeEvents(searchStation)//
.debounce(500, TimeUnit.MILLISECONDS)// default Scheduler is Computation
.observeOn(AndroidSchedulers.mainThread())//
.subscribe(getOps().getdata());
}
とオブザーバーとして
public Observer<TextViewTextChangeEvent> getdata()
{
return new Observer<TextViewTextChangeEvent>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(TextViewTextChangeEvent onTextChangeEvent) {
// stationsugession(onTextChangeEvent.text().toString());
//here i called link to get the data from the server
}
};
}
私の問題は、編集テキストの変更が発生する前でもリンクが呼び出されることです。そして、textchangeイベントを呼び出さない。私は何かが足りないのですかここで何が間違っているのですか?私はrxandroidとrxjavaを初めて使用します。
使った
compile 'io.reactivex:rxandroid:1.1.0'
compile 'io.reactivex:rxjava:1.1.0'
compile 'com.jakewharton.rxbinding:rxbinding:0.2.0'
編集:
これで動作するようになりました。リストを取得するためのロジックでnullポインターを取得していました。onErrorメソッドを使用してスタックトレースを配置すると、問題が見つかりました。
また、最初の呼び出しをスキップする場合は、サブスクリプションオブジェクトに対して。skip(1)を呼び出す必要があります。 [ありがとうDaniel Lew]
上記のコードは現在完全に機能しています
RxTextView.textChanges()
は、変更を発行する前に、TextView
の現在のテキスト値を発行します。 ドキュメント を参照してください。
変更のみをデバウンスする場合は、skip(1)
を追加する必要があります。これにより、最初の放出が無視されます。
_mSubscription = RxTextView.textChangeEvents(searchStation)
.skip(1)
.debounce(500, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getOps().getdata());