An OkHttp interceptor which uses HTTP requests queue with RxJava.
- Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
- Add the dependencies:
...
implementation("com.squareup.okhttp3:okhttp:4.2.x")
implementation("io.reactivex.rxjava2:rxjava:2.x.x")
implementation("com.github.arin-pang:okhttp-preloader-interceptor:v0.1.0")
...
public static PublishSubject<HTTPPreloaderInterceptor.PreloaderInfo>
publishCall = PublishSubject.create();
HTTPPreloaderInterceptor preloaderInterceptor = new HTTPPreloaderInterceptor(publishCall);
OkHttpClient okHttpClient = builder
.addInterceptor(preloaderInterceptor)
.build();
private CompositeDisposable compositeDisposable = new CompositeDisposable();
private void changePreloader(HTTPPreloaderInterceptor.PreloaderInfo info){
if(info.isRemained()){
// showPreloaderUI()
} else {
// hidePreloaderUI()
}
}
compositeDisposable.add(
APIClient.publishCall.subscribe(
info -> {
changePreloader(info);
}
)
);
compositeDisposable.add(
APIClient.publishCall.ofType(HTTPPreloaderInterceptor.PreloaderRequest.class).subscribe(
info -> {
enqueuedRequest(info);
}
);
);
compositeDisposable.add(
APIClient.publishCall.ofType(HTTPPreloaderInterceptor.PreloaderResponse.class).subscribe(
info -> {
dequeuedRequest(info);
}
);
);
compositeDisposable.dispose();
HTTPPreloaderInterceptor preloaderInterceptor = new HTTPPreloaderInterceptor(publishCallCount);
preloaderInterceptor.logLevel(HTTPPreloaderInterceptor.LogLevel.REMAINED_REQUESTS_COUNT);
You can change the log level at any time by calling logLevel()
.
To log to a custom location, pass a Logger
instance to the constructor.
HttpPreloaderInterceptor logging = new HttpPreloaderInterceptor(new Logger() {
@Override public void log(String message) {
Timber.tag("OkHttp").d(message);
}
});
Warning: The logs generated by this interceptor when using the REMAINED_REQUESTS
or MODIFIED_REQUEST
log levels have the potential to leak sensitive information such as "Authorization" or "Cookie" headers and the contents of request and response bodies. This data should only be logged in a controlled way or in a non-production environment.