我正在研究一个项目,如果手机上没有互联网连接,会出现一个警报对话框。此警告对话框显示网络不可用,并有一个"重试"按钮,用户可以在其中重试互联网连接测试。
我怎样才能正确地实现这个按钮?是否有"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);
-所以用户不能通过按后退键来取消对话框。快乐的编码。