如何在第一次运行MainActivity时绕过getIntent()和getStringExtra()

时间:2017-12-07 00:44:38

标签: java android android-intent

我遇到以下代码导致我的应用崩溃的问题。

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = getIntent();
final String years = intent.getStringExtra(MenuActivity.yearsMessage);
final String rate = intent.getStringExtra(MenuActivity.rateMessage);

如果是第一次打开我的应用程序,那么来自getStringExtra()命令的空白值会导致应用程序在代码中稍后调用时崩溃。

double rate = Double.parseDouble(rateString);
double years = Double.parseDouble(yearsString);
double outFloat = inFloat * Math.pow((1f + rate), years);
return df2.format(outFloat);

有人知道在第一次打开应用程序时我可以声明getStringExtra方法的默认值吗?

3 个答案:

答案 0 :(得分:0)

尝试检查变量年份和速率的空值,就像CommonsWare所说的那样,将解析放在try catch中也是一个好主意,以防解析失败

if (years != null && rate != null) {
    try {
        double rate = Double.parseDouble(rateString);
        double years = Double.parseDouble(yearsString);
        double outFloat = inFloat * Math.pow((1f + rate), years);
        return df2.format(outFloat);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

答案 1 :(得分:0)

您可以检查何时有额外可用,请尝试以下方式:

if (intent.hasExtra("years") && intent.hasExtra("rate")){
  final String years = intent.getStringExtra("years");
  final String rate = intent.getStringExtra("rate");
}

Intent - hasExtra

不要忘记你必须在意图中使用key / value参数发送数据,如下所示:

Intent intent = new Intent(this,YourActivity.class);
intent.putExtra("years", yearsMessage);
intent.putEtra("rate", ratesMessage);
startActivity(intent);

答案 2 :(得分:0)

我认为你从其他活动接收字符串的语法是错误的。将menuactivity.yearsmessage替换为您在发送活动的putExtra中指定的密钥