你知道更好的方法来编写这种方法吗?

时间:2014-11-03 10:41:41

标签: android if-statement methods equals

我创建了这个方法来处理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();
}

2 个答案:

答案 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)

  1. 使用strings.xml为您的字符串进行本地化(重试,取消,“连接失败”,“请检查互联网连接”,“连接超时”,“连接速度慢”)
  2. 如果您的值表示某些内容,则为其创建数据类型。我的意思是:如果您的字符串将报告互联网是否可用或缓慢,为什么要将其保持为字符串?字符串可以是一切,并转换为直接表示它可以假设的值将会大大改善您的代码的东西。

    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";
    }
    
  3. 您可以将调用链接到构建器并删除变量dialog,因为您可以直接调用show()(如果您仍需要AlertDialog的引用,{{1仍然返回它。)

  4. 你可以和你的幻想一起做这样的事情

    show()

    但如果您想添加更多.setTitle(errorMsg == InternetStatus.Slow ? "Connection timeout" : "Please check internet connection") .setMessage(errorMsg == InternetStatus.Slow ? "Connection failded" : "Connection is slow") ,它会使您的代码变得混乱。 您可以在InternetStatus内创建一个返回消息的方法(如果在其他地方也需要它)。但高度取决于您正在使用的项目。您可以使用“扩展”方法,只需将它放在您需要的地方,而不必将其放在InternetStatus代码中(enum可以有方法)。你应该考虑每一个机会。


  5. 也许?

    enum