Shu*_* A. 8 android android-progressbar retrofit2
如何在每个Retrofit 2.0API调用上显示进度条,而无需在每个活动中创建进度条,显示和解除.进度条应该在 API被命中时显示,并且当我们得到响应onResponse或被onFailure调用时它应该被忽略.
我试过这个:
ProgressDialog mProgressDialog = new ProgressDialog(this);
mProgressDialog.setIndeterminate(true);
mProgressDialog.setMessage("Loading...");
mProgressDialog.show();
retrofitService.login(new SignInRequest(email, password),
new Callback<SignInResponse>() {
@Override
public void onResponse(Call<SignInResponse> call, Response<SignInResponse> response) {
if (mProgressDialog.isShowing())
mProgressDialog.dismiss();
}
@Override
public void onFailure(Call<SignInResponse> call, Throwable t) {
if (mProgressDialog.isShowing())
mProgressDialog.dismiss();
}
});
Run Code Online (Sandbox Code Playgroud)
但是每当我进行API调用时,这段代码都必须在任何地方粘贴.我不想要重复的代码.
您的Activity中的另一个内部类可能会保存您.
class MyCallBack implements CallBacks<T>{
@Override
public void onResponse(Call<T> call, Response<T> response) {
if (mProgressDialog.isShowing())
mProgressDialog.dismiss();
}
@Override
public void onFailure(Call<SignInResponse> call, Throwable t) {
if (mProgressDialog.isShowing())
mProgressDialog.dismiss();
}
}
Run Code Online (Sandbox Code Playgroud)
当您发送请求时:
retrofitService.login(new SignInRequest(email, password),
new MyCallback<SignInResponse>() {
@Override
public void onResponse(Call<SignInResponse> call, Response<SignInResponse> response) {
super(call, response);
//do more on response
}
@Override
public void onFailure(Call<SignInResponse> call, Throwable t) {
super(call, error);
/* Do more on failure. For example: give a reason why the
request failed*/
}
});
Run Code Online (Sandbox Code Playgroud)
正如@Sourabh 所建议的那样,我最终使用了一个 Base 活动并在每次 API 调用期间调用了简单的方法。在BaseActivity,
public void showDialog() {
if(mProgressDialog != null && !mProgressDialog.isShowing())
mProgressDialog.show();
}
public void hideDialog() {
if(mProgressDialog != null && mProgressDialog.isShowing())
mProgressDialog.dismiss();
}
Run Code Online (Sandbox Code Playgroud)
在您的子活动中,您可以直接调用showDialog()和hideDialog()来显示和关闭对话框。
根据 Shubham 和 peter 的回答,我写了一个这样的类:
class CustomCallBack<T> implements Callback<T> {
private ProgressDialog mProgressDialog;
Context context;
CustomCallBack(Context context) {
this.context = context;
mProgressDialog = new ProgressDialog(context);
((Activity) context).getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
mProgressDialog.setIndeterminate(true);
mProgressDialog.setMessage("Loading...");
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.show();
}
@Override
public void onResponse(Call<T> call, Response<T> response) {
if (mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
((Activity) context).getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}
}
@Override
public void onFailure(Call<T> call, Throwable t) {
if (mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
((Activity) context).getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望它会帮助你。