我的问题是我在bottomNavigationView
上快速单击多次时出现错误:
只有创建视图层次结构的原始线程可以触摸其视图。
我使用bottomNavigationView
处理了Rxbinding
次点击。
model.getNews()
重新运行可观察到的Single<>
。
我处理bottomNavigationView
点击的代码是:
private Disposable loadNews(int categoryNumber) {
return model.getNews(1, categoryNumber, OrderBy.DESC)
.observeOn(AndroidSchedulers.mainThread())
.doFinally(() -> view.showLoading(false))
.doOnSubscribe(__ -> view.showLoading(true) )
.subscribeOn(Schedulers.io())
.retry()
.map(NewsResponse::newsDetails)
.subscribe(newsDetails -> view.setUpRecyclerView(newsDetails),
throwable -> ToastUtils.showShort("Error " + throwable.getMessage()
+ "Caused by " + throwable.getCause()));
}
答案 0 :(得分:1)
我认为您需要在流的下方添加另一个observeOn(AndroidSchedulers.mainThread()),如下所示:
private Disposable loadNews(int categoryNumber) {
return model.getNews(1, categoryNumber, OrderBy.DESC)
.observeOn(AndroidSchedulers.mainThread())
.doFinally(() -> view.showLoading(false))
.doOnSubscribe(__ -> view.showLoading(true) )
.subscribeOn(Schedulers.io())
.retry()
.map(NewsResponse::newsDetails)
.observeOn(AndroidSchedulers.mainThread()) <-- HERE!
.subscribe(newsDetails -> view.setUpRecyclerView(newsDetails),
throwable -> ToastUtils.showShort("Error " + throwable.getMessage()
+ "Caused by " + throwable.getCause()));
}
答案 1 :(得分:0)
这可能不是针对为什么的直接修复,您的代码试图从非主线程访问视图,但是我相信一个简单的创可贴修复将只是消除对bottomNavigationView的单击。
该代码看起来像这样(从内存中,所以如果这不起作用,请告诉我):
RxBinding.clicks(bottomNavigationView)
.debounce(
300 /* Time to debounce according to TimeUnit specified below */,
TimeUnit.MILLIS
)
// .... continue with the rest of your Rx chain