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

时间:2014-07-02 09:02:50

标签: android

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

如何正确实施此按钮?是否有“goto”声明,如果没有互联网连接,它可以重复?我尝试了标记的休息并继续它不起作用。

这是我的代码:

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();
        }

2 个答案:

答案 0 :(得分:6)

这只是一个例子,您应该将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();
    }
}

答案 1 :(得分:6)

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()是一种帮助方法,用于确定Internet连接是否可用。

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

注意: builder.setCancelable(false); - 因此用户无法通过按后退按钮来解除对话框。快乐的编码。