Retrofit Request Interceptor阻止主线程

tic*_*fab 3 android networkonmainthread retrofit

这里已经提到这个问题,但这是一个很老的问题,我找不到任何其他信息.

Retrofit API调用的Request Interceptor在主线程上执行.处理AccountManager以将auth令牌添加到请求标头时,这是一个问题,例如

String token = mAccountManager.blockingGetAuthToken(account, AuthConsts.AUTH_TYPE, false);
Run Code Online (Sandbox Code Playgroud)

同样的问题上讨论G +并没有在GitHub上一个相关的问题在这里.

虽然这一切都有效(感谢SquareUp!),解决它的最佳方法是什么?在AsyncTask或类似事件中包装Retrofit调用感觉就像使整个想法失效一样.

Jak*_*ton 12

Retrofit的拦截器用于使用已知信息修改请求.也就是说它应该是一个简单的实例转换.

您正在寻找的最佳方法是使用OkHttp的拦截器来添加标头.这些将在后台线程上运行.

class AuthInterceptor implements Interceptor {
  @Override public Response intercept(Chain chain) throws IOException {
    Request request = chain.request();

    String authHeader = // TODO get auth token
    request = request.builder()
      .header("Authorization", authHeader)
      .builder();

    return chain.proceed(request);
  }
}
Run Code Online (Sandbox Code Playgroud)