发送网络请求时,可能因为网络较慢或上传文件较大,导致后台加载时间过长,为了优化用户体验,可以给用户一个网络正在请求的dialog提示.提示用户"正在加载".但是每次请求网络都new 一个Dialog,并在网络请求的回调中去show 和dismiss显然代码太冗余,因此使用okgo时,可以自定义一个继承StringCallBack的DialogCallBack,在每次开始请求时提示用户,请求成功或失败后dismiss
使用前必须选依赖Okgo
源码如下
public abstract class DialogCallBack extends StringCallback {
ProgressDialog dialog;
public DialogCallBack(Context activity){
super();
initDialog(activity);
}
private void initDialog(Context activity) {
if (dialog == null){
dialog = new ProgressDialog(activity);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCanceledOnTouchOutside(false);
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
dialog.setMessage("加载中...");
}
}
@Override
public void onStart(Request<String, ? extends Request> request) {
super.onStart(request);
if (dialog != null && !dialog.isShowing()){
dialog.show();
}
}
@Override
public void onFinish() {
super.onFinish();
if (dialog != null && dialog.isShowing()){
dialog.dismiss();
dialog = null;
}
}
@Override
public void onError(Response<String> response) {
super.onError(response);
if (!NetUtil.isNetWorkEnable(dialog.getContext())){
ToastUtil.showToast(dialog.getContext(),"网络异常");
if (dialog.isShowing()){
dialog.dismiss();
dialog = null;
}
}
}
}
调用方法:
OkGo.<String>post(IUrls.GET_NEXT_XUANDAO)
.params("caseId", caseId)
.params("userId", userId)
.execute(new DialogCallBack(context) {
@Override
public void onSuccess(Response<String> response) {
}
@Override
public void onError(Response<String> response) {
}
});