Roy*_*son 0 android kotlin rx-java rx-java2
我正在使用Android 的Reactive Network库。我是 RxJava 的绝对初学者,我正在努力解决它。我想做的是:
1]持续观察手机网络连接状态的变化
2]如果手机已连接到网络,请检查一次是否有互联网连接
为此,我在 Kotlin 中有以下代码:
ReactiveNetwork.observeNetworkConnectivity(applicationContext)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { connectivity ->
if (connectivity.state == NetworkInfo.State.CONNECTED) {
ReactiveNetwork.checkInternetConnectivity()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { isConnectedToInternet ->
if (isConnectedToInternet) {
Log.d("VED-APP", "Connected to Internet")
} else {
Log.d("VED-APP", "Not Connected to Internet")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这段代码很丑陋,而且非常嵌套。有没有办法清理这段代码?
尽管示例是 Kotlin 中的,但 Java 或 Kotlin 中的答案都会有所帮助。
您可以过滤connectivity.state,然后使用flatmap operator 将observable 转换为ReactiveNetwork.checkInternetConnectivity()。如 :
ReactiveNetwork.observeNetworkConnectivity(applicationContext)
.subscribeOn(Schedulers.io())
.filter{it.state == NetworkInfo.State.CONNECTED}
.flatMapSingle{ReactiveNetwork.checkInternetConnectivity()}
.observeOn(AndroidSchedulers.mainThread())
.doOnNext{
if (it) {
Log.d("VED-APP", "Connected to Internet")
} else {
Log.d("VED-APP", "Not Connected to Internet")
}
}
.subscribe()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
365 次 |
| 最近记录: |