在做项目的时候会有强制下线的功能,弹出一个强制退出登录的弹窗,点击跳转到登录页面。
激活强制退出登录的方式就是在请求接口的时候,根据接口返回的code等于特定的值来激活。
定义一个工具类,在每次请求接口的时候对将参数传入工具类
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.KeyEvent;
import android.view.View;
import android.widget.TextView;
public class DialogUtils {
public static void showLoginout(final Context mContext, final int code) {
final Dialog mDialog;
mDialog = new Dialog(mContext, R.style.WycDialogStyle);
mDialog.setContentView(R.layout.dialog_base2);
mDialog.setCanceledOnTouchOutside(false); // 触摸黑色不能取消
mDialog.setCancelable(false); // 返回按钮不能取消
TextView messageText = mDialog.findViewById(R.id.tv_message);
if (code == 15) {
messageText.setText("登录失效,请重新登录!");
}
try {
mDialog.show();
} catch (Exception e) {
e.printStackTrace();
}
mDialog.findViewById(R.id.tv_yes).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mDialog.dismiss();
}
});
}
}
但是有时候一个界面会有众多的请求,因此就会出现多个弹窗,思考解决方法想到可以把它定
义为静态的,并且是单例的模式,就像这样的
private static Dialog mDialog;
public static Dialog dialogInit(Context mContext) {
if (mDialog == null) {
synchronized (Dialog.class) {
if (mDialog == null) {
mDialog = new Dialog(mContext, R.style.WycDialogStyle);
}
}
}
return mDialog;
}
但是在弹出一次之后在跳转页面发现弹窗不再弹出了,还出现错误日志:
java.lang.IllegalStateException: View DecorView@3a7b850[] has already been added to the window manager...
于是通过查到资料详细的了解到Dialog是必须依附在Activity上的,于是尝试判断上下文
是否一致,来创建或者引用Dialog变量,发现还是有问题,再琢磨想到可以通过判断加一个变量值
一旦弹出推出框就不再弹出,然后在BaseActivity中的onCreate中重新初始化isShow为true
public class DialogUtils {
public static boolean isShow = true;
public static void showLoginout(final Context mContext, final int code) {
if (isShow) {
isShow = false;
final Dialog mDialog;
mDialog = new Dialog(mContext, R.style.WycDialogStyle);
mDialog.setContentView(R.layout.dialog_base2);
mDialog.setCanceledOnTouchOutside(false); // 触摸黑色不能取消
mDialog.setCancelable(false); // 返回按钮不能取消
TextView messageText = mDialog.findViewById(R.id.tv_message);
if (code == 15) {
messageText.setText("登录失效,请重新登录!");
}
try {
mDialog.show();
} catch (Exception e) {
e.printStackTrace();
}
mDialog.findViewById(R.id.tv_yes).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mDialog.dismiss();
}
});
}
}
}
至此,问题解决了