Как я могу использовать библиотеку retrofit с progressbar?
Я использую модифицированную библиотеку. Как я могу использовать progressbar перед вызовом метода успеха обратного вызова ?
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();
}
});
}
2 ответов
вы можете использовать его таким образом:
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();
}
});
}
вы можете проверить этот метод util. Идея: создайте наблюдаемую оболочку, затем добавьте 2 действия "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);
}
};
}
});
}
использование:
bindLoadingAction(this::showLoadingView, this::hideLoadingView, YourRetrofitObservable);
(я использовал синтаксис Java 8. this:: showLoadingView означает ссылку на метод showLoadingView в текущем классе.)