を組み合わせることで、次のスニペットを持っていない:二つの異なる観測
Log.d("#######", Thread.currentThread().getName());
RxSearchView.queryTextChangeEvents(searchView)
.debounce(400, TimeUnit.MILLISECONDS,Schedulers.newThread())
.flatMap(new Func1<SearchViewQueryTextEvent, Observable<GifsData>>() {
@Override
public Observable<GifsData> call(SearchViewQueryTextEvent txtChangeEvt) {
return RestWebClient.get().getSearchedGifs(txtChangeEvt.queryText().toString(),"dcJmzC");
}
})
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<GifsData>() {
@Override
public void onCompleted() {
Log.d("#######","onCompleted searchGifs");
}
@Override
public void onError(Throwable e) {
Log.d("#######",e.toString());
}
@Override
public void onNext(GifsData gifsData) {
mainFragmentPresenterInterface.displaySearchedGifsList(gifsData);
}
});
}
どんなに私は、次のエラーを取得維持しようとするもの:
java.lang.IllegalStateException: Must be called from the main thread. Was: Thread[RxNewThreadScheduler-2,5,main]
はおそらくthis..Havenに時間近くを費やしてきました問題が何かを理解することができました。でも、次のリンクに私のスニペットを照合しようとした:
Combine RxTextView Observable and Retrofit Observable
ありません運を。誰かがここで間違っていることを指摘できますか?
ありがとうございました。
この行を削除します。「.subscribeOn(Schedulers.newThread())」は正しく動作します。あなたはバックグラウンドスレッドのビューにアクセスしています。または、Observable以外の検索テキストをフェッチして、バックグラウンドスレッドでビューにアクセスしないようにすることもできます。 –
しかし、私は主なスレッド上でそれを観察しています。これは、ビューが操作されている場所ではありません。 – user2511882
例外は表示されません。しかし、onNextはいずれも起動されません。 – user2511882