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