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

use*_*005 1 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();
        }
Run Code Online (Sandbox Code Playgroud)

TeR*_*RRo 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();
    }
}
Run Code Online (Sandbox Code Playgroud)


Nit*_*023 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();
    }
Run Code Online (Sandbox Code Playgroud)

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

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

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