I am using retrofit library. How can i use progressbar before calling callback success method ?
public void getMovies() {
MovieClient.getWeather().movies(MovieClient.getRandomMovie(), new Callback<MovieRequest>() {
@Override
public void success(MovieRequest movieRequest, Response response) {
Picasso.with(getApplicationContext()).load(movieRequest.getPoster()).into(image);
}
@Override
public void failure(RetrofitError error) {
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
You can use it this way:
public void getMovies() {
ProgressDialog mProgressDialog = new ProgressDialog(this);
mProgressDialog.setIndeterminate(true);
mProgressDialog.setMessage("Loading...");
mProgressDialog.show();
MovieClient.getWeather().movies(MovieClient.getRandomMovie(), new Callback<MovieRequest>() {
@Override
public void success(MovieRequest movieRequest, Response response) {
Picasso.with(getApplicationContext()).load(movieRequest.getPoster()).into(image);
if (mProgressDialog.isShowing())
mProgressDialog.dismiss();
}
@Override
public void failure(RetrofitError error) {
if (mProgressDialog.isShowing())
mProgressDialog.dismiss();
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
You maybe check this method util. Idea: create wrapper observable then add 2 action "start" & "finish".
public static <T> Observable<T> bindLoadingAction(final Runnable start, final Runnable finish, final Observable<T> source) {
final Observable<T> o = source.observeOn(AndroidSchedulers.mainThread());
return o.lift(new Observable.Operator<T, T>() {
@Override
public Subscriber<? super T> call(final Subscriber<? super T> child) {
return new Subscriber<T>() {
@Override
public void onStart() {
super.onStart();
if (start != null) {
new Handler(Looper.getMainLooper()).post(start::run);
}
child.onStart();
}
@Override
public void onCompleted() {
if (finish != null) {
finish.run();
}
child.onCompleted();
}
@Override
public void onError(Throwable e) {
if (finish != null) {
finish.run();
}
child.onError(e);
}
@Override
public void onNext(T t) {
if (finish != null) {
finish.run();
}
child.onNext(t);
}
};
}
});
}
Use:
bindLoadingAction(this::showLoadingView, this::hideLoadingView, YourRetrofitObservable);
(I used Java 8 syntax. this::showLoadingView meaning reference to showLoadingView method in current class.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With