保存状态会导致应用崩溃

时间:2013-05-09 19:22:38

标签: android savestate

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

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

我不知道要处理这个,这是我试过的最后一段代码。

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

3 个答案:

答案 0 :(得分:1)

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

因此,改变

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

通过

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

并删除;if (savedInstanceState.containsKey("LENGTH"));

中的if (savedInstanceState.containsKey("HEIGHT"));

答案 1 :(得分:1)

IT意味着一个(或两个)文本字段没有数字。你需要在ParseDouble周围捕获该异常并以某种方式处理它(可能使用默认值)。

答案 2 :(得分:1)

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