我正在尝试在Android应用程序中使用RxJava以及Retrofit与RESTful API进行交互。
在我的Android应用中,我在各种UX事件中发出了许多请求。如果其中一个请求返回“无效令牌”错误,我想暂停所有其他在开始之前排队的请求,以便我可以续订用户的令牌,然后恢复已暂停的请求。
使用RxJava是否可以?我正在学习图书馆,但是找不到此功能。
谢谢,
如果这些请求是并行发送的,那么您可能会收到多个“无效令牌”错误。您只想为错误的第一个实例刷新令牌。要在刷新令牌时暂停请求,请考虑可观察到的有效令牌的来源。
假设您有一个具有方法的网络处理类:
Single<Response> makeNetworkRequest(Request request) { ... }
Single<Boolean> getToken() { ... }
实现的目的是当令牌可用时发出一个值,但否则要等到令牌被刷新。
然后,您的观察者链看起来像:
observerChain
.flatMapSingle(request -> networkHandler.makeNetworkRequest(request)
.retryWhen(error -> error.flatMapSingle(e -> networkHandler.getToken()))
...
retryWhen()
运算符通过提供一个可观察值从错误中恢复,该观察值在非空时将重新订阅上游可观察值,在这种情况下为makeNetworkRequest()
。
由于您没有显示要改编的任何代码,因此您必须对上面的代码进行调整,才能使其与您的应用程序一起使用。