【发布时间】:2017-11-23 23:16:30
【问题描述】:
我关心的是应该打印多少 OkHttp 日志。
在我的应用程序的某些屏幕上,有太多的 API 调用 --> logcat 被淹没了,所以我想限制/关闭那里的日志记录,除了一次性调试
我是 Dagger 2 和依赖注入的新手,一直关注 this tutorial。
我有以下工作,但我不确定那里是否有任何不好的做法,或者是否可以进一步改进:
(我的应用中有大约 20 个 Retrofit API 接口/ 20 个不同的端点)
@Module
public class NetModule {
private String mBaseUrl;
private final HttpLoggingInterceptor LOGGING_FULL = new HttpLoggingInterceptor().setLevel
(HttpLoggingInterceptor
.Level.BODY);
private final HttpLoggingInterceptor LOGGING_HEADERS = new HttpLoggingInterceptor().setLevel
(HttpLoggingInterceptor
.Level.HEADERS);
// Constructor needs one parameter to instantiate.
public NetModule(String baseUrl) {
this.mBaseUrl = baseUrl;
}
@Provides
@Singleton
OkHttpClient.Builder provideOkHttpClientBuilder() {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
//...
return builder;
}
@Provides
@Singleton
Retrofit.Builder provideRetrofitBuilder() {
return new Retrofit.Builder()
.baseUrl(mBaseUrl);
}
@Provides
@Singleton
Api1 provideApi1(OkHttpClient.Builder okHttpClientBuilder, Retrofit.Builder retrofitBuilder) {
if (BuildConfig.DEBUG || !BuildConfig.FLAVOR.equals(FLAVOUR_PRODUCTION)) {
okHttpClientBuilder.addInterceptor(LOGGING_HEADERS);
}
return retrofitBuilder.client(okHttpClientBuilder.build()).build().create(Api1.class);
}
@Provides
@Named("logging_full")
@Singleton
Api1 provideApi1FullLog(OkHttpClient.Builder okHttpClientBuilder, Retrofit.Builder retrofitBuilder) {
if (BuildConfig.DEBUG || !BuildConfig.FLAVOR.equals(FLAVOUR_PRODUCTION)) {
okHttpClientBuilder.addInterceptor(LOGGING_FULL);
}
return retrofitBuilder.client(okHttpClientBuilder.build()).build().create(Api1.class);
}
//... Repeats for Api2, Api3, ..., Api20
}
用法:
1) 在大多数情况下,不需要记录正文,因此:
@Inject
Api1 api1;
2) 在某些情况下,日志主体是必需的:
@Inject
@Named("logging_full")
Api1 api2;
【问题讨论】:
标签: android retrofit2 dagger-2 okhttp3