java - 实现 onSaveInstanceState 并自定义它以在旋转屏幕后保存文本后应用程序崩溃

标签 java android

我制作的应用程序在您选择最小和最大数字后显示随机数。但是旋转结果消失后,所以我实现了 onSaveInstanceState 并根据我的需要定制了它,之后我的应用程序一直崩溃。

公共(public)类 MainActivity 扩展 AppCompatActivity {

EditText et_min,et_max;
Button button;
TextView tv_output;

Random r;
int min, max, output;
private static final String STATE_TV_OUTPUT = "tv_output";


@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    String onSave = savedInstanceState.getString("onSave");
}

@Override
protected void onSaveInstanceState(Bundle SavedInstanceState) {
    super.onSaveInstanceState(SavedInstanceState);
    SavedInstanceState.putString("onSave", "1");
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    r = new Random();
    String onSave = tv_output.getText().toString();
    et_max = (EditText) findViewById(R.id.et_max);
    et_min = (EditText) findViewById(R.id.et_min);
    button = (Button) findViewById(R.id.button);
    tv_output = (TextView) findViewById(R.id.tv_output);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String tempMin, tempMax;
            tempMin = et_min.getText().toString();
            tempMax = et_max.getText().toString();
            if (!tempMin.equals("") && !tempMax.equals(""))//ovde stavljam ih u poziciju gde su slobodni za pisanje
                min = Integer.parseInt(tempMin);
                max = Integer.parseInt(tempMax);//ova dva sluze kako bi pretvorili stringove u intove za potrebe dole methoda
            if (max > min) {
                output = r.nextInt((max - min) + 1) + min;//nextInt sluzi kako bi dao random broj izmedju dva broja u ovom slucaju min i max
                tv_output.setText("" + output);
            }
        }

    });
}

}

最佳答案

您需要更改顺序,否则更改后的 bundle 将不会被传递:

@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
    savedInstanceState.putString("onSave", "1");
    super.onSaveInstanceState(savedInstanceState);
}

super类方法的调用并不总是最顶层的。

关于java - 实现 onSaveInstanceState 并自定义它以在旋转屏幕后保存文本后应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54508148/

相关文章:

android - 创建了一个新模块但扩展函数显示错误 : Cannot access 'java.io.Serializable' which is a supertype of 'kotlin.String'

android - hive 上使用Android兼容库的缺点

java - Android 首选项屏幕,仅全屏?

java - 简单来说,什么是工厂?

java - Scala 的 2.9.1 编译器会丢弃类型参数信息吗?

java - 使用 JSoup 解析复杂表中的值

java - 更改 Switch 语句中的 fragment

android - Android 的 openssl-fips-2.0 出现核心故障

Android:AsyncTask 如何使用等待/通知

java - Android:HTML 编码器