【问题标题】:eclipse android not evaluating expression [duplicate]eclipse android不评估表达式[重复]
【发布时间】:2014-07-28 08:37:05
【问题描述】:

我这里有一段代码理论上应该可以工作,但实际上并没有。

        Extras = getIntent().getExtras();
    if(Extras!=null)
    if(Extras.getString("startup")!=null)
        StartUp = Extras.getString("startup");
    else
        StartUp = "0";

    prefs = this.getSharedPreferences("runonstartup", 0);
    start.setChecked(prefs.getBoolean("yesorno", false));

    Toast.makeText(getApplicationContext(), "Start-up: "+StartUp+"\nChecked: "+String.valueOf(start.isChecked()), Toast.LENGTH_LONG).show();

    if(StartUp=="1"&&start.isChecked()) 
    {
        new PostTask3().execute("testing");
    }

那里的 toast 显示:Start-up: 1 and Checked: true。然而,“if”未能将表达式评估为真并运行 PostTask3。

帮助...?

【问题讨论】:

  • if().. else.. 为什么不用大括号?
  • 假设您的代码是正确的并且您使用的平台存在错误(按照“理论上应该可以工作”)绝不是一个好主意。通常最好假设您有一个错误,但您还没有找到它。

标签: java android eclipse


【解决方案1】:

要比较Strings,请使用.equals()

所以改变

 if(StartUp=="1"&&start.isChecked()) 

if(StartUp.equals("1") && start.isChecked())

欲了解更多信息,请参阅How do I compare strings in Java?

【讨论】:

  • 最好将常量与对象进行比较,而不是对象与常量进行比较
  • @blackbelt:不一定。如果 StartUp 为 null 表示其他地方存在错误,那么 NullPointerException(从而提醒开发人员)可能会比面对不正确的假设继续进行更好的结果。
  • @JonSkeet 感谢您的意见。对于开发人员来说是一个有用的提示,但它仍然是一个糟糕的用户体验。在我看来,至少
  • @blackbelt:崩溃通常比做错事(例如擦除他们保存的游戏或其他任何事情)更好的用户体验。并且开发人员更有可能在它到达最终用户之前就注意到了。
猜你喜欢
  • 1970-01-01
  • 2020-07-08
  • 2010-10-22
  • 2015-06-26
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
相关资源
最近更新 更多