我有一个要上传的文件队列,这些文件是Observable发出的,我只想在有WIFI连接时上传文件。我有一个解决方案,该解决方案仅在建立WIFI连接时才开始发出队列,但理想情况下,我想在发出每个队列项目之前进行检查(然后在此时阻塞直到建立WIFI连接)。这样,如果在队列上载期间断开Wifi的连接,队列将阻止上载项目,并在重新建立Wifi后恢复。
这是我到目前为止所拥有的:
ReactiveNetwork.observeNetworkConnectivity(application)
.filter(ConnectivityPredicate.hasState(NetworkInfo.State.CONNECTED))
.filter(ConnectivityPredicate.hasType(ConnectivityManager.TYPE_WIFI))
.take(1)
.toFlowable(BackpressureStrategy.BUFFER)
.flatMap { queueItemAvailable() }
.flatMap { audioSampleUploader.uploadFile(it) }
.subscribeOn(Schedulers.single())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { // SOMETHING HERE }
所以我想移动
queueItemAvailable()
到最高级别,然后对要上传的每个项目进行(阻止)网络连接检查,但是我在RxJava中非常生锈,因此无法弄清楚该怎么做。
任何智慧都会受到赞赏吗?
答案 0 :(得分:0)
好吧,您应该尝试将两个可观察到的东西结合起来,一个用于上传项目,另一个用于检查wifi是否可用,我认为您应该将整个网络连接检查移到另一种方法上,然后再返回
ReactiveNetwork.observeNetworkConnectivity(application)
.flatMap { queueItemAvailable() }
.withLatestFrom {checkForWifiConnection(), BiFunction<QueueResult, Boolean, Pair< Boolean, QueueResult>>
{ wifiAvailable, queueResult ->
Pair(queueResult, wifiAvailable)
}).filter { it.first }
.flatMap { audioSampleUploader.uploadFile(it) }
.subscribeOn(Schedulers.single())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { // SOMETHING HERE }
请原谅代码格式,但其想法是结合Observables并返回一对,仅在wifi连接可用时发出值。我相信您也可以使用zipwith
运算符来组合可观察值。