RXJava2块流,直到满足条件为止

时间:2019-06-19 13:28:35

标签: java android kotlin rx-java rx-java2

我有一个要上传的文件队列,这些文件是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中非常生锈,因此无法弄清楚该怎么做。

任何智慧都会受到赞赏吗?

1 个答案:

答案 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运算符来组合可观察值。