有没有更好的方法来设置像全局配置一样的承载,而不是每次都像这样设置:
restClient.setBearerAuth(TokenStore.getInstance().getLocalToken());
根网址相同,是否有全局配置,而不是像这样设置:
String root= Application.getInstance().getApplicationContext().getResources().getString(R.string.whiteLabelApiBaseHost)
restClient.setRootUrl(root);
在改造中,有类似的东西:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Application.getInstance().getApplicationContext()
.getResources().getString(R.string.whiteLabelApiBaseHost))
有什么想法吗?
答案 0 :(得分:0)
要设置根URL,您可以使用此方法,用常量
替换字符串@Rest(rootUrl = "http://company.com/ajax/services", converters = { MappingJackson2HttpMessageConverter.class }, interceptors = MyAuthInterceptor.class)
public interface MyRestClient {
@Get("/events")
EventList getEvents();
}
请注意,我们在@Rest注释的参数中设置了一个拦截器。 所以创建一个这样的类:
@EBean(scope = Scope.Singleton)
public class MyAuthInterceptor implements ClientHttpRequestInterceptor {
@Bean
MyAuthStore authStore;
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
HttpHeaders headers = request.getHeaders();
HttpAuthentication auth = new HttpBasicAuthentication(authStore.getUsername(), authStore.getPassword());
headers.setAuthorization(auth);
return execution.execute(request, body);
}
}
现在在执行请求之前调用MyAuthInterceptor.intercept(),您可以根据需要设置身份验证数据
在你的main build.gradle文件中,你可以在android元素中添加
productFlavors {
development {
buildConfigField "String", "SERVICE_URL_BASE", "\"dev.xxx.com/rest\""
}
test {
buildConfigField "String", "SERVICE_URL_BASE", "\"test.xxx.com/rest\""
}
production {
buildConfigField "String", "SERVICE_URL_BASE", "\"production.xxx.com/rest\""
}
}
然后在@Rest注释中,您可以使用此代码获取当前的风味值:
@Rest(rootUrl = "https://" + BuildConfig.SERVICE_URL_BASE)
现在,您可以选择要使用的构建变体(variant = flavor + buildType)来使用所需的值。要选择变体,您可以使用相应的视图,它应该出现在android studio的左侧。
此技术有助于避免仅使用不同的变量来创建flavor包树