简单的封装OKGO回调,自动显示网络连接时的Dialog

简单的封装,做个笔记,大神绕过!当然,有好的建议欢迎提出,若有不足请指教。

目的:每次请求网络时,一般都会有个progress的弹窗显示,让用户清除我们正在连接加载网络,而不是无反应。

实现就直接先上图,再上代码了,界面一点都不丑



重写的callback

/**
 * @author zgq
 * @version 1.0
 * @describe -- 重写callBack ,统一dialog
 * @date 2018/5/5
 */
public class DialogCallBack extends StringCallback {

    private String tag_log = "DialogCallBack";

    LoadingDialog dialog;
    private Context context;
    private boolean isShowDialog;//是否显示dialog
    private boolean isCancel;//是否能返回键取消,默认能
    private Object tag;//用于取消网络连接

    /**
     *
     * @param context
     * @param isShowDialog  是否显示dialog
     * @param tag   用于取消网络连接
     * @param isCancel  是否能返回键取消,默认能
     */
    public DialogCallBack(Context context, boolean isShowDialog, Object tag, boolean isCancel){
        this.context = context;
        this.isShowDialog = isShowDialog;
        this.tag = tag;
        this.isCancel = isCancel;
    }

    public DialogCallBack(Context context, boolean isShowDialog, Object tag){
        this.context = context;
        this.isShowDialog = isShowDialog;
        this.tag = tag;
        isCancel = true;
    }
    public DialogCallBack(Context context, boolean isShowDialog){
        this.context = context;
        this.isShowDialog = isShowDialog;
        isCancel = true;
    }

    @Override
    public void onStart(Request<String, ? extends Request> request) {
        super.onStart(request);
        if (isShowDialog){
            
          dialog = LoadingDialog.showprogress(context, isCancel);
dialog.setOnCancelListener( new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { if ( tag != null){ LogUtils. i( tag_log+ "取消网络请求") ; OkGo. getInstance().cancelTag( tag) ; } } }) ; } } @Override public void onSuccess(Response<String> response) { LogUtils. i( tag_log + "onSuccess:") ; } @Override public void onFinish() { super.onFinish() ; LogUtils. i( tag_log + "onFinish:") ; if ( dialog != null && dialog.isShowing()){ dialog.dismiss() ; dialog = null; } } @Override public void onError(Response<String> response) { super.onError(response) ; LogUtils. i( tag_log + "onError:"+response.body()) ; }


其中的LoadingDialog.class\

/**
 * @author zgq
 * @version 1.0
 * @describe -- 网络的等待dialog
 * @date 2018/5/31
 */
public  class LoadingDialog extends Dialog{

    private static LoadingDialog mLoadingProgress;

    public LoadingDialog(Context context) {
        super(context);
    }

    public LoadingDialog(Context context, int theme) {
        super(context, theme);
    }//这个消息文字,根据自己需要加吧
    public static LoadingDialog showprogress(Context context,CharSequence message,boolean iscanCancel){
        mLoadingProgress=new LoadingDialog(context, R.style.loading_dialog);//自定义style主要让背景变成透明并去掉标题部分

        //触摸外部无法取消,必须(根据自己需要吧)
        mLoadingProgress.setCanceledOnTouchOutside(false);

        mLoadingProgress.setTitle("");
        mLoadingProgress.setContentView(R.layout.loading_layout);
        mLoadingProgress.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
        if(message==null|| TextUtils.isEmpty(message)){
            mLoadingProgress.findViewById(R.id.loading_tv).setVisibility(View.GONE);
        }else {
            TextView tv = (TextView) mLoadingProgress.findViewById(R.id.loading_tv);
            tv.setText(message);
        }
        //按返回键响应是否取消等待框的显示
        mLoadingProgress.setCancelable(iscanCancel);

        mLoadingProgress.show();

        return mLoadingProgress;
    }

    public static LoadingDialog showprogress(Context context,boolean iscanCancel){
        mLoadingProgress=new LoadingDialog(context, R.style.loading_dialog);//自定义style主要让背景变成透明并去掉标题部分
        
        mLoadingProgress.setCanceledOnTouchOutside(false);

        mLoadingProgress.setTitle("");
        mLoadingProgress.setContentView(R.layout.loading_layout);
        mLoadingProgress.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

        mLoadingProgress.findViewById(R.id.loading_tv).setVisibility(View.GONE);
        
        mLoadingProgress.setCancelable(iscanCancel);

        mLoadingProgress.show();

        return mLoadingProgress;
    }

    public static LoadingDialog showprogress(Context context){
        mLoadingProgress=new LoadingDialog(context, R.style.loading_dialog);
        
        mLoadingProgress.setCanceledOnTouchOutside(false);

        mLoadingProgress.setTitle("");
        mLoadingProgress.setContentView(R.layout.loading_layout);
        mLoadingProgress.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

        mLoadingProgress.findViewById(R.id.loading_tv).setVisibility(View.GONE);

        mLoadingProgress.setCancelable(true);

        mLoadingProgress.show();

        return mLoadingProgress;
    }




    public static void dismissprogress(){
        if(mLoadingProgress!=null){
            mLoadingProgress.dismiss();
        }
    }
}

代码都很简单,其中的stay

<style name="loading_dialog" parent="Widget.AppCompat.ProgressBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:background">@android:color/transparent</item>
    <!--弹出框时背景是否变暗-->
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowIsTranslucent">true</item>
</style>

dialog布局loading_layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="@dimen/dp_100"
    android:layout_height="@dimen/dp_100"
    android:background="@drawable/ret_loading_corner"
    android:gravity="center"
    android:orientation="vertical">
    <!--用于改变圆圈的颜色-->
    <ProgressBar
        android:id="@+id/loading_pb"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:indeterminateTint="@color/white"
        android:indeterminateTintMode="src_atop" />

    <TextView
        android:id="@+id/loading_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="正在加载..."
        android:textColor="@color/white"
        android:textSize="14sp"
        android:layout_marginTop="@dimen/dp_5"
        android:visibility="gone"/>
</LinearLayout>

布局中的ret_loading_corner

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <solid android:color="@color/loading_bg"/>
    <corners android:radius="@dimen/dp_10"/>
    <stroke android:color="@color/gray_bc" android:dashWidth="@dimen/dp_0.5"/>

</shape>

这个loading_bg颜色就是一个灰色的半透明颜色

然后是使用实例。根据重写相应的方法,调用请求时自动弹窗,结束后自动消失。手动取消dialog则取消此次网络请求。

OkGo.<String>get("")
        .tag(this)
        .params("","")
        .execute(new DialogCallBack(this, true, MainActivity.this,
                true){
            @Override
            public void onSuccess(Response<String> response) {
                super.onSuccess(response);
            }

            @Override
            public void onFinish() {
                super.onFinish();
            }
        });
嗯。。。。就这么多代码。本人目的单纯的做个笔记。同时希望能对需要的人有所帮助


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值