范围如何与Auth令牌一起使用?在添加可以使用auth令牌对其进行签名的拦截器之前,我无法创建Retrofit实例.因此,我想在auth令牌可用时(登录后)创建Retrofit.在这种情况下,如何使示波器正常工作?
非常感谢!
解决方法:
没有最佳的方法来执行此操作,并且它还取决于更改/重新创建Retrofit实例的频率.
哪个更好,哪个更适合您的用例,在很大程度上取决于您要完成的工作以及如何完成.您尝试实现目标的方式有很多,但总的来说,您有两种选择
>为每个改造实例创建一个新客户端(例如,如果您只登录一次用户),则只需在相同范围内添加客户端
>创建okhttp3的@Singleton实例,并在需要时使用newBuilder()修改客户端
我认为第一点是不言而喻的,只是在创建改造时创建客户,使用相同的作用域并完成.
第二种方法通过在创建改造实例时将拦截器添加到okhttp客户端,从而使用newBuilder()方法的Okhttp3功能.
它看起来像这样:
// Some singleton client to maybe also use in other parts of your app
@Singleton
OkHttpClient provideClient() { return new OkHttpClient(); }
// creating your retrofit client
@UserScope
Retrofit provideRetrofit(OkHtpClient client, Interceptor userInterceptor) {
return new Retrofit.Builder()
.client(client.newBuilder() // new builder to modify okhttp3
.addNetworkInterceptor(interceptor)
.build())
/* other settings */
.build();
}
如果您有创造力,也可以只在拦截器上公开setCredentials()方法,则只需创建一次即可,然后通过将它们添加到@Singleton范围来重用所有对象.然后,您可以通过访问和修改拦截器来更改用户,尽管按照我的拙见,这不是一个干净的方法.