我正在开发一个项目,如果手机上没有互联网连接,则会出现一个警告对话框。 此警报对话框显示网络不可用,并且有一个“重试”按钮,用户可以在此重试互联网测试。
如何正确实施此按钮?是否有“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();
}
答案 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);
- 因此用户无法通过按后退按钮来解除对话框。快乐的编码。