【发布时间】:2015-11-19 17:04:16
【问题描述】:
有什么方法可以拦截或认证异步请求吗?例如在这样的流程中:从用户那里获取密码,使用它来获取令牌,然后重试被拦截的调用?
【问题讨论】:
标签: okhttp
有什么方法可以拦截或认证异步请求吗?例如在这样的流程中:从用户那里获取密码,使用它来获取令牌,然后重试被拦截的调用?
【问题讨论】:
标签: okhttp
我也有同样的问题here。
我在代码的getToken方法中使用wait()和notify(),但是因为我在Retrofit库中使用了OkHttp,所以它正在创建一个新线程并且可以在这里进行异步操作。
public synchronized void getToken() throws InterruptedException {
if (!isRefreshing()) {
//This is very important to call notify() on the same object that we call wait();
final TokenProvider myInstance = this;
setRefreshing(true);
Log.d("refreshToken", "Refreshing token..." );
//Make async call
getRestClient().getAccountService().getRefreshedToken(mLoginData.getRefreshToken())
.subscribe(new Observer<LoginResponse>() {
@Override
public void onCompleted() {
synchronized (myInstance) {
setRefreshing(false);
Log.d("refreshToken", "notifyAll onComplete.");
myInstance.notifyAll();
}
}
@Override
public void onError(Throwable e) {
synchronized (myInstance) {
setRefreshing(false);
myInstance.notifyAll();
Log.d("refreshToken", "onError .");
}
}
@Override
public void onNext(LoginResponse loginResponse) {
synchronized (myInstance) {
mLoginData = loginResponse;
Log.d("refreshToken", "notifyAll onNext .");
myInstance.notifyAll();
}
}
});
}
Log.d("refreshToken", "before wait ." + android.os.Process.getThreadPriority(android.os.Process.myTid()) + this.toString());
this.wait();
Log.d("refreshToken", "after wait ." + android.os.Process.getThreadPriority(android.os.Process.myTid()) + this.toString());
}
如果这对你有用,你可以试试。
【讨论】: