allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.robining:retrofit2-progress:v0.2-SNAPSHOT'
}
添加ProgressCallFactory和ProgressCallAdapterFactory
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://localhost/") //这里没有使用,因为在Service里面配置的是全路径
//.client(okHttpClient) //使用callFactory代替
.callFactory(new ProgressCallFactory(okHttpClient))
.addCallAdapterFactory(new ProgressCallAdapterFactory())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(new StringConvertFactory())
.build();
使用ProgressWrapper封装响应
@GET("https://github.com/robining/retrofit2-progress/new/master?readme=1")
ProgressWrapper<Observable<String>> baiduRx();
@GET("https://github.com/robining/retrofit2-progress/new/master?readme=1")
ProgressWrapper<Call<String>> baiduCall();
设置进度监听器
service.baiduCall().setProgressListener(this)
.getCall()
.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
if (response.isSuccessful()) {
tvResp.append(response.body() + "\n");
} else {
tvResp.append("请求失败:" + response.code() + "\n");
}
}
@Override
public void onFailure(Call<String> call, Throwable t) {
tvResp.append("请求失败:" + t.getMessage() + "\n");
}
});
service.baiduRx().setProgressListener(this)
.getCall()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
tvResp.append(s + "\n");
}
@Override
public void onError(Throwable e) {
tvResp.append("请求失败:" + e.getMessage() + "\n");
}
@Override
public void onComplete() {
}
});