【问题标题】:Saving state causes app to crash保存状态会导致应用崩溃
【发布时间】:2013-05-09 19:22:38
【问题描述】:

日志说活动不能暂停,并且出现数字格式异常,我正在尝试保存两个包含数字的编辑文本的状态,但两者都可以为空或一个可以为空

在我的活动中有两个编辑文本,用户可以手动输入数字并移至下一步,也可以打开计算器将一些数字相加,并将总数设置为其中一个编辑文本,我想保存因此,如果他需要使用计算器填写两个编辑文本,当他们返回第二个数字时,他设置的第一个数字仍然存在。

我不知道如何处理,这是我尝试的最后一段代码。

protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    double length =Double.parseDouble(edtNumber1.getText().toString());
    double height = Double.parseDouble(edtNumber2.getText().toString());

    outState.putDouble("LENGTH", length);
    outState.putDouble("HEIGHT", height);
}

在 onCreate 中

if (savedInstanceState != null) {
    double hght = savedInstanceState.getDouble("LENGTH");
    double lnth = savedInstanceState.getDouble("LENGTH");
    if (savedInstanceState.containsKey("LENGTH")); {
        edtNumber1.setText(Double.toString(lnth));
    }

    if(savedInstanceState.containsKey("HEIGHT")); {
        edtNumber2.setText(Double.toString(hght)); 
    }
}

【问题讨论】:

    标签: android savestate


    【解决方案1】:

    尝试在方法结束时调用super.onSaveInstanceState(outState); 并确保您的editText 包含数字。

    因此,改变

    double hght = savedInstanceState.getDouble("LENGTH");

    通过

    double hght = savedInstanceState.getDouble("HEIGHT");

    并删除您在if (savedInstanceState.containsKey("LENGTH"));if (savedInstanceState.containsKey("HEIGHT")); 中的;

    【讨论】:

    • 好的,谢谢,但看到我的编辑文本在第一次打开计算器时可能都是空的
    【解决方案2】:

    IT 表示其中一个(或两个)文本字段没有数字。您需要在 ParseDouble 周围捕获该异常并以某种方式处理它(可能通过使用默认值)。

    【讨论】:

    • 感谢当我给它一个默认值为零时它会停止崩溃但是当我离开和返回时它仍然没有保存状态,还有更多建议
    【解决方案3】:

    “if”语句后面有多余的分号,将它们变成无操作并导致后面的块总是被执行。

    【讨论】:

    • 另外,Gabe Sechan 是对的;即使找到了值,它们也可能是格式错误的,从而导致异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多