Ответ 1
Это то, что я сделал бы, чтобы показать прогресс.
Observable<String> downloadObservable = Observable.create(
sub -> {
InputStream input = null;
OutputStream output = null;
try {
Response response = http_client.newCall(request).execute();
if (response.isSuccessful()) {
input = response.body().byteStream();
long tlength= response.body().contentLength();
output = new FileOutputStream("/pathtofile");
byte data[] = new byte[1024];
sub.onNext("0%");
long total = 0;
int count;
while ((count = input.read(data)) != -1) {
total += count;
sub.onNext(String.valueOf(total*100/tlength) + "%");
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
}
} catch(IOException e){
sub.onError(e);
} finally {
if (input != null){
try {
input.close();
}catch(IOException ioe){}
}
if (out != null){
try{
output.close();
}catch (IOException e){}
}
}
sub.onCompleted();
}
);
И используйте Абонента, который имеет полные абстрактные методы.
Subscriber<String> mySubscriber = new Subscriber<String>() {
@Override
public void onCompleted() {
// hide progress bar
}
@Override
public void onError(Throwable e) {
// hide progress bar
}
@Override
public void onNext(String percentProgress) {
// show percentage progress
}
};