Java 如何使用progressbar改装库?

Java 如何使用progressbar改装库?,java,android,retrofit,Java,Android,Retrofit,我正在使用翻新库。在调用回调成功方法之前,如何使用progressbar public void getMovies() { MovieClient.getWeather().movies(MovieClient.getRandomMovie(), new Callback<MovieRequest>() { @Override public void success(MovieRequest movieRequest, Response r

我正在使用翻新库。在调用回调成功方法之前,如何使用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();

        }
    });
}
public void getMovies(){
MovieClient.getWeather().movies(MovieClient.getRandomMovie(),new Callback()){
@凌驾
公开作废成功(MovieRequest MovieRequest,响应){
毕加索.with(getApplicationContext()).load(movieRequest.getPoster()).into(图像);
}
@凌驾
公共无效失败(错误){
Toast.makeText(getApplicationContext(),error.getMessage(),Toast.LENGTH_SHORT.show();
}
});
}

您可以这样使用它:

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();

      }
   });
}
public void getMovies(){
ProgressDialog mProgressDialog=新建ProgressDialog(此);
mProgressDialog.setUndeterminate(true);
设置消息(“加载…”);
mProgressDialog.show();
MovieClient.getWeather().movies(MovieClient.getRandomMovie(),new Callback()){
@凌驾
公开作废成功(MovieRequest MovieRequest,响应){
毕加索.with(getApplicationContext()).load(movieRequest.getPoster()).into(图像);
if(mProgressDialog.isShowing())
mProgressDialog.disclose();
}
@凌驾
公共无效失败(错误){
if(mProgressDialog.isShowing())
mProgressDialog.disclose();
Toast.makeText(getApplicationContext(),error.getMessage(),Toast.LENGTH_SHORT.show();
}
});
}

您可以检查此方法。 想法:创建可观察的包装器,然后添加2个动作“开始”和“完成”


(我使用了Java 8语法。这个::showLoadingView表示对当前类中showLoadingView方法的引用。)

它工作正常吗?我有完全相同的结构,但我的应用程序在事件触发时崩溃
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);