首次运行MainActivity时,如何绕过GetIntent()和GetStringExtra()



我有一个问题,以下代码导致我的应用程序崩溃。

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);

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

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

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

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

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

意图 - hasextra

不要忘记您必须在意图中使用键/值参数发送数据,例如:

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

尝试检查变量年和速率上的无效值,正如Consonware所说,将解析放入尝试捕获中可能也是一个好主意,以防万一解析失败的情况

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();
    }
}

我thinkyour语法从另一个活动中接收字符串是错误的。用您在发送活动上的putextra中分配的键

中替换菜单。

最新更新