Android:带有重试/取消的最简单的Internet连接对话框

时间:2014-08-24 15:36:37

标签: java android dialog

我一直在实施一个对话框,该对话框会在应用程序打开后立即检查互联网连接(即onCreate())。但是,我将对话框代码移动到另一个类以保持MainActivity清洁。

我需要在每次用户点击重试时检查连接,如果互联网不存在则再次显示对话框,否则调用MainActivity类中的onRefresh()方法。

代码看起来像这样:

public static boolean showNoConnectionDialog(final Context c) {


    if(checkConnectivity(c))
    {
        result = true;
        return result;
    }
    else
    {
    AlertDialog.Builder b =new AlertDialog.Builder(c);
    b.setTitle("No Connection");
    b.setMessage("Cannot connect to the internet!");
    b.setPositiveButton("Retry", new AlertDialog.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            if(!checkConnectivity(c))
            showNoConnectionDialog(c);
            else
            {
            result = true;

            }
    }
    });
    b.setNegativeButton("Exit", new AlertDialog.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

            ((Activity)c).finish();
        }
    });
    b.create().show();
}
    return result;

}

private static Boolean checkConnectivity(Context c) {

    ConnectivityManager cm = (ConnectivityManager) c.getSystemService(Context.CONNECTIVITY_SERVICE);
    // test for internet connection
    if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected())
        return true;
    else
        return false;

}

在MainActivity中,我尝试过:

if(DialogBoxes.showNoConnectionDialog(this)){

    onRefresh();

 }

但是,连接到互联网后单击“重试”按钮不会执行任何操作,因为" if"部分只检查一次。使用while而不是if会导致UI停止响应。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

首先在你的班级内部的任何方法之外宣布你的AlertDialog

AlertDialog dialog;

然后在你的正面按钮监听器内:

b.setPositiveButton("Retry", new AlertDialog.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        if(!checkConnectivity(c))
            dialog.show();
        else
        {
            result = true;
        }
}
});

dialog = b.create();
dialog.show();