大佬教程收集整理的这篇文章主要介绍了android – 如何使用Retrofit解决多个API端点?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@module( complete = false,library = true ) public final class ApiModule { public static final @R_675_10495@ng PRODUCTS_BASE_URL = "https://products.com"; @Provides @Singleton Endpoint provideEndpoint() { return Endpoints.newFixedEndpoint(PRODUCTS_BASE_URL); } @Provides @Singleton ObjectMapper provideObjectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setPropertyNamingStrategy( PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERscoreS); return objectMapper; } @Provides @Singleton RestAdapter provideRestAdapter( Endpoint endpoint,ObjectMapper objectMapper) { return new RestAdapter.builder() .setLogLevel(RestAdapter.LogLevel.NONE) .setEndpoint(endpoint) .setConverter(new JacksonConverter(objectMapper)) .build(); } @Provides @Singleton Productsservice provideProductsservice(RestAdapter restAdapter) { return restAdapter.create(Productsservice.class); } }
现在,我想与之沟通另一个API(例如“http://subsidiaries.com”).是否可以在重用ObjectMapper和RestAdapter时扩展给定的ApiModule?或者我不应该延长它?我已经尝试复制模块了.但这涉及到我必须复制Endpoint,ObjectMapper和…… RestAdapter有一个私有的构造函数 – 所以我不能.
@module( complete = false,library = true ) public final class ApiModule { public static final @R_675_10495@ng PRODUCTS_BASE_URL = "https://products.com"; public static final @R_675_10495@ng SUBSIDIARIES_BASE_URL = "https://subsidiaries.com"; public static final @R_675_10495@ng PRODUCTS = "products"; public static final @R_675_10495@ng SUBSIDIARIES = "subsidiaries"; @Provides @Singleton @Named(PRODUCTS) Endpoint provideProductsEndpoint() { return Endpoints.newFixedEndpoint(PRODUCTS_BASE_URL); } @Provides @Singleton @Named(SUBSIDIARIES) Endpoint provideSubsidiariesEndpoint() { return Endpoints.newFixedEndpoint(SUBSIDIARIES_BASE_URL); } @Provides @Singleton ObjectMapper provideObjectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setPropertyNamingStrategy( PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERscoreS); return objectMapper; } @Provides @Singleton @Named(PRODUCTS) RestAdapter provideProductsRestAdapter(@Named(PRODUCTS) Endpoint endpoint,ObjectMapper objectMapper) { return newRestAdapterBuilder(objectMapper) .setEndpoint(endpoint) .build(); } @Provides @Singleton @Named(SUBSIDIARIES) RestAdapter provideSubsidiariesRestAdapter(@Named(SUBSIDIARIES) Endpoint endpoint,ObjectMapper objectMapper) { return newRestAdapterBuilder(objectMapper) .setEndpoint(endpoint) .build(); } @Provides @Singleton @Named(PRODUCTS) Productsservice provideProductsservice(@Named(PRODUCTS) RestAdapter restAdapter) { return restAdapter.create(Productsservice.class); } @Provides @Singleton @Named(SUBSIDIARIES) Productsservice provideSubsidiariesservice(@Named(SUBSIDIARIES) RestAdapter restAdapter) { return restAdapter.create(Productsservice.class); } private RestAdapter.builder newRestAdapterBuilder(ObjectMapper objectMapper) { return new RestAdapter.builder() .setLogLevel(RestAdapter.LogLevel.NONE) .setConverter(new JacksonConverter(objectMapper)); } }
现在,在您注入Productsservice的任何地方,您都需要使用@Named(PRODUCTS)或@Named(SUBSIDIARIES)注释依赖项,具体取决于您需要的变体.当然,除了@Named注释,您还可以创建自己的@L_262_10@注释并使用它们.请参阅“限定符”下的here.
要稍微展平模块,可以将RestAdapter的创建移动到provide * service()方法中,并取消提供* RestAdapter()方法.当然,除非你需要RestAdapters作为模块之外的依赖项.
以上是大佬教程为你收集整理的android – 如何使用Retrofit解决多个API端点?全部内容,希望文章能够帮你解决android – 如何使用Retrofit解决多个API端点?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。