gpt4 book ai didi

android - RxJava2 - 重复任务的间隔并在有条件的情况下运行可观察对象

转载 作者:行者123 更新时间:2023-11-30 00:30:30 25 4
gpt4 key购买 nike

运行改造

这是我的界面:

  @GET("solicitation/all")
Observable<SolicitationResponse> getAll(@Query("X-Authorization") String apiKey);

这是我运行它的地方:

    apiService.getAll(getResources().getString(R.string.api_key))
.subscribeOn(Schedulers.io())
.flatMapIterable(SolicitationResponse::getData)
.observeOn(AndroidSchedulers.mainThread())
.delay(5L, java.util.concurrent.TimeUnit.SECONDS) // THIS DOESN'T WORK LIKE I WANT IT TO..
.repeat()
.subscribe(s -> Log.e(TAG, "data: " + s.getName()));

那么,两个问题:

1) 如何添加条件以仅在有互联网连接时运行?

这行不通:

if (NetworkUtils.isConnected()) {
//observable above here
}

为什么?因为条件代码不会无休止地自行运行,这意味着它只会检查我们是否有互联网连接一次,因此,如果我们失去它就会崩溃。

有什么方法可以在运行 getAll 方法之前添加条件吗?

2) 我需要在任务之前或之后添加一个间隔,通过插入 .delay 它将延迟订阅,这不是我想要或需要的。在这种特殊情况下我该如何完成?

最佳答案

这里有一个建议:

Observable.fromCallable(() -> NetworkUtils.isConnected())
.flatMap(isConnected -> {
if (isConnected) {
return apiService.getAll(getResources().getString(R.string.api_key))
.subscribeOn(Schedulers.io())
.flatMapIterable(SolicitationResponse::getData);
} else {
return Observable.empty();
}
})
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.immediate())
.repeatWhen(observable -> observable.delay(5, TimeUnit.SECONDS))
.subscribe(s -> Log.e(TAG, "data: " + s.getName()));

1) 最直接的方法是将网络检查添加到流中,并使用 flatMap() 有条件地决定进一步做什么。

2) 可以使用具有所需值的 delaySubscription() 来添加延迟,但是第一次也会发生延迟,因此在最后添加延迟的第二种方法似乎在这里更合适,可以使用 repeatWhen()

完成

关于android - RxJava2 - 重复任务的间隔并在有条件的情况下运行可观察对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44490773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com