我正在嘗試使用 Retrofit 運行 REST api 調用并讓它返回并可觀察,但目前我只能弄清楚如何將其設置為延遲,但不幸的是跳過了“第一個間隔”在這里我試圖獲取聯系人列表public interface IContactWebApi { @GET ("api/GetContactsByGroup") Observable<Groups> getContactsByGroupSync(@Query ("id") String deviceUid);}這是我使用延遲獲得可觀察值的地方public void syncContacts(String address, String uid, int interval) { Retrofit retrofit = getRetrofit(address, true); Observable<List<Group>> groupObservable = retrofit.create(IContactWebApi.class) .getContactsByGroupSync(id) .subscribeOn(Schedulers.io()) .delay(interval, TimeUnit.SECONDS) .onErrorResumeNext(Observable.empty()) .repeat() .observeOn(AndroidSchedulers.mainThread()); groupObservable.subscribe(groups -> handleGroups(groups));}我看到了一些建議 Observable.interval 的建議,但我似乎不知道如何將其與另一個間隔一起使用。到目前為止,我能做的最好的事情就是無延遲地運行一次,然后在 subscribe lamda 中,我將可觀察值替換為有延遲的可觀察值 Observable<List<Group>> groupObservable = retrofit.create(IContactWebApi.class) .getContactsByGroupSync(uid) .map(Groups::getGroups) .subscribeOn(Schedulers.io()) .onErrorResumeNext(Observable.empty()) .observeOn(AndroidSchedulers.mainThread()); groupObservable.subscribe(groups -> { handleGroups(groups) retrofit.create(IContactWebApi.class) .getContactsByGroupSync(uid) .map(Groups::getGroups) .subscribeOn(Schedulers.io()) .delay(interval, TimeUnit.SECONDS) .onErrorResumeNext(Observable.empty()) .repeat() .observeOn(AndroidSchedulers.mainThread()) .subscribe(groups2 -> handleGroups(groups2)); });有誰知道更好的方法來做到這一點?
1 回答

幕布斯7119047
TA貢獻1794條經驗 獲得超8個贊
看來你可以只interval
使用flatMap
:
IContactWebApi api = retrofit.create(IContactWebApi.class); Observable.interval(interval, TimeUnit.SECONDS) .flatMap(i -> api.getContactsByGroupSync(uid)) .map(Groups::getGroups) .subscribeOn(Schedulers.io()) .onErrorResumeNext(Observable.empty()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(groups -> handleGroups(groups));
添加回答
舉報
0/150
提交
取消