添加带有重试按钮的警告对话框



我正在研究一个项目,如果手机上没有互联网连接,会出现一个警报对话框。此警告对话框显示网络不可用,并有一个"重试"按钮,用户可以在其中重试互联网连接测试。

我怎样才能正确地实现这个按钮?是否有"goto"语句,以便在没有互联网连接的情况下可以重复?我尝试了标签上的break,然后继续,它不起作用。

这是我的代码:

if(isNetworkAvailable())
    {
        GetBlogPostsTask getBlogPostsTask = new GetBlogPostsTask();
        getBlogPostsTask.execute();
    }
    else
        {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("ERROR !!");
            builder.setMessage("Sorry there was an error getting data from the Internet.nNetwork Unavailable!");
;
            builder.setPositiveButton("Retry", new DialogInterface.OnClickListener()
            {
                @Override
                public void onClick(DialogInterface dialog, int which)
                {
                }
            });
            AlertDialog dialog = builder.create();
            dialog.show();
            Toast.makeText(this, "Network Unavailable!", Toast.LENGTH_LONG).show();
        }

这只是一个例子,您应该实现AlertDialog作为全局变量,而不是每次尝试发出请求时都创建一个。

public void runTask () {
    if(isNetworkAvailable())
    {
        GetBlogPostsTask getBlogPostsTask = new GetBlogPostsTask();
        getBlogPostsTask.execute();
    } else {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("ERROR !!");
        builder.setMessage("Sorry there was an error getting data from the Internet.nNetwork Unavailable!");
        ;
        AlertDialog dialog = builder.create();
        builder.setPositiveButton("Retry", new DialogInterface.OnClickListener()
        {
            @Override
            public void onClick(DialogInterface dialog, int which)
            {
                dialog.dismiss();
                runTask();
            }
        });
        dialog.show();
        Toast.makeText(this, "Network Unavailable!", Toast.LENGTH_LONG).show();
    }
}

TeRRo的代码有一个小错误。您在添加按钮之前调用AlertDialog dialog = builder.create();,因此按钮没有加起来。

所以我更新了代码。这段代码将检查互联网连接,如果互联网是可用的,它执行任何你想要的,如果没有,它显示警告对话框与两个按钮。

更新代码:

    if(isNetworkAvailable()) {
    /* DO WHATEVER YOU WANT IF INTERNET IS AVAILABLE */
    } else {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setCancelable(false);
        builder.setTitle("No Internet");
        builder.setMessage("Internet is required. Please Retry.");
        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                finish();
            }
        });
        builder.setPositiveButton("Retry", new DialogInterface.OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int which)
            {
                dialog.dismiss();
                InitiateDownload();
            }
        });
        AlertDialog dialog = builder.create(); // calling builder.create after adding buttons
        dialog.show();
        Toast.makeText(this, "Network Unavailable!", Toast.LENGTH_LONG).show();
    }

isNetworkAvailable()是一个Helper方法,用于确定Internet连接是否可用。

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager
            = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

注意: builder.setCancelable(false); -所以用户不能通过按后退键来取消对话框。快乐的编码。

最新更新