我创建了这个方法来处理2种不同的创建警告对话框的方式,具体取决于互联网状态。你知道更好的方法来获得相同的结果吗?在if-else块中对字符串使用.equals()似乎不是最佳实践方式......我是对的吗?
public void noInternetAlertDialog(String errorMsg) {
String title = null;
String msg = null;
if (errorMsg.equals("none")) {
title = "Connection failded";
msg = "Please check internet connection";
} else if (errorMsg.equals("slow")) {
title = "Connection timeout";
msg = "Connection is slow";
}
AlertDialog.Builder builder;
builder = new AlertDialog.Builder(Main.this);
builder.setCancelable(false);
builder.setTitle(title);
builder.setMessage(msg);
builder.setPositiveButton("Retry", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
downloadDialog();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
答案 0 :(得分:1)
用字符串标识状态/结果确实不是一个好主意!你应该使用枚举。
enum NoInternetResult {
slow, none
}
然后:
public void noInternetAlertDialog(NoInternetResult result) {
String title = "Connection failded";
String msg = "Please check internet connection";
if (result==NoInternetResult.slow) {
title = "Connection timeout";
msg = "Connection is slow";
}
顺便说一句。使用strings.xml为你的字符串,如“重试”和“取消”(http://developer.android.com/guide/topics/resources/string-resource.html)
答案 1 :(得分:1)
strings.xml
为您的字符串进行本地化(重试,取消,“连接失败”,“请检查互联网连接”,“连接超时”,“连接速度慢”)如果您的值表示某些内容,则为其创建数据类型。我的意思是:如果您的字符串将报告互联网是否可用或缓慢,为什么要将其保持为字符串?字符串可以是一切,并转换为直接表示它可以假设的值将会大大改善您的代码的东西。
public enum InternetStatus {
Offline,
Slow
}
==
比equals
电话更快。
如果您不想使用enum
,请考虑使用"none".equals(errorMessage)
String title = "Connection failded";
String msg = "Please check internet connection";
if ("slow".equals(errorMsg)) {
title = "Connection timeout";
msg = "Connection is slow";
}
您可以将调用链接到构建器并删除变量dialog
,因为您可以直接调用show()
(如果您仍需要AlertDialog
的引用,{{1仍然返回它。)
你可以和你的幻想一起做这样的事情
show()
但如果您想添加更多.setTitle(errorMsg == InternetStatus.Slow ? "Connection timeout" : "Please check internet connection")
.setMessage(errorMsg == InternetStatus.Slow ? "Connection failded" : "Connection is slow")
,它会使您的代码变得混乱。
您可以在InternetStatus
内创建一个返回消息的方法(如果在其他地方也需要它)。但高度取决于您正在使用的项目。您可以使用“扩展”方法,只需将它放在您需要的地方,而不必将其放在InternetStatus
代码中(enum
可以有方法)。你应该考虑每一个机会。
也许?
enum