【发布时间】:2019-06-12 06:35:57
【问题描述】:
我有一个方法intercept,它需要一个响应对象作为回报。
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request original = chain.request();
mRequestBuilder = original.newBuilder();
mAgent.getToken(new OnTokenResponse() {
@Override
public void onSuccess(final String token) {
mRequestBuilder.removeHeader(AUTHORIZATION);
mRequestBuilder.header(AUTHORIZATION, "Bearer " + token);
}
@Override
public void onFailure(final String error) {
}
});
Request request = mRequestBuilder.build();
return chain.proceed(request);
}
mAgent.getToken() 进行网络调用,如果成功则在 onSuccess 中返回一个字符串。反过来,我将其作为标题添加到mRequestBuilder。
现在,由于网络调用需要一些时间才能完成,所以我只想在网络调用完成(成功或失败)后执行Request request = mRequestBuilder.build()。
如何同步这个操作?
【问题讨论】:
-
@SantanuSur 因为 onSuccess 有 void 返回类型。你不能从那个方法返回任何东西。
-
@GhostCat 不,不是。而且由于它是库代码的一部分,我无法同步它。
-
@Rajkiran 记录在案:您对“void”返回类型的评论没有抓住重点。你将一个匿名内部类传递给
getToken()。您的代码不会调用这些方法,因此您的代码不会收到潜在的结果,即使onSuccess()会返回一些东西! -
@GhostCat 你的答案在哪里?此外,您的评论已被删除,其中有建议。
-
@Rajkiran 添加了答案.. 希望对您有所帮助..
标签: java android synchronization retrofit2