如何解决RxJava:调用包含观察者
我在我创建的 SearchView
中实现了 RxJava/RxBinding。这是代码
val queryStream = RxSearchView.queryTextChanges(searchView)
.observeOn(AndroidSchedulers.mainThread())
.debounce(400,TimeUnit.MILLISECONDS)
queryStream.subscribe({
if (it.isNotEmpty()) {
Log.e("queryStream","ini querynya ${it}")
getSearchUser(it.toString())
}
},{
// Exception
Log.e("Exception","${it.message}")
})
private fun getSearchUser(q: String) {
viewmodel.getSearchUser(q).observe(this,{ user ->
if (user != null) {
when (user) {
is Resource.Loading -> binding.progressBar.visibility = View.VISIBLE
is Resource.Success -> {
binding.progressBar.visibility = View.GONE
adapter.setData(user.data)
}
is Resource.Error -> {
binding.progressBar.visibility = View.GONE
binding.viewError.root.visibility = View.VISIBLE
binding.viewError.tvError.text =
user.message ?: getString(R.string.something_wrong)
}
}
}
})
}
问题是在 getSearchUser
块内调用的 subscribe
函数导致了这个错误
Exception: Cannot invoke observe on a background thread
我应该怎么做才能解决这个问题?
谢谢
注意:我使用 jakewharton.rxbinding2
作为 SearchView
解决方法
我添加了 .map
并将顺序更改为
val queryStream = RxSearchView.queryTextChanges(searchView)
.map { query ->
query.toString()
}
.debounce(400,TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
它有效
但我仍然不知道它是如何工作的
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。