Java 执行onSaveInstanceState并自定义它以在旋转屏幕后保存文本后应用程序崩溃

Java 执行onSaveInstanceState并自定义它以在旋转屏幕后保存文本后应用程序崩溃,java,android,Java,Android,我制作了一个应用程序,在你们选择最小值和最大值后显示随机数。但在旋转结果消失后,我实现了onSaveInstanceState,并根据需要对其进行了自定义,此后我的应用程序一直崩溃 公共类MainActivity扩展了AppCompatActivity{ EditText et_min,et_max; Button button; TextView tv_output; Random r; int min, max, output; private static final String ST

我制作了一个应用程序,在你们选择最小值和最大值后显示随机数。但在旋转结果消失后,我实现了onSaveInstanceState,并根据需要对其进行了自定义,此后我的应用程序一直崩溃

公共类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);
            }
        }

    });
}

}

您需要更改订单,否则更改的捆绑包将无法传递:

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

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

您需要更改顺序,否则更改的捆绑包将无法传递:

@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
    savedInstanceState.putString("onSave", "1");
    super.onSaveInstanceState(savedInstanceState);
}
super
class'方法的调用并不总是最顶层的方法。

请将此行放在下面

String onSave=tv_output.getText().toString();
初始化
tv\u输出后,否则将获得NullPointerException

更新:

要在旋转期间保存文本视图中的文本,请将
android:freezesText=“true”
添加到xml(),无需使用onSaveInstanceState。

将此行

String onSave=tv_output.getText().toString();
初始化
tv\u输出后,否则将获得NullPointerException

更新:


要在旋转期间保存文本视图中的文本,请将android:freezesText=“true”
添加到xml(),无需使用onSaveInstanceState。

什么是logcat输出

您可以在此处阅读有关Android活动生命周期的更多信息:

保存和恢复状态的代码如下所示:

static final String STATE_KEY = "onSave";

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

@Override
protected void onSaveInstanceState(Bundle SavedInstanceState) {
    SavedInstanceState.putString(STATE_KEY, "1");
    super.onSaveInstanceState(SavedInstanceState);//call this at the end
}

什么是logcat输出

您可以在此处阅读有关Android活动生命周期的更多信息:

保存和恢复状态的代码如下所示:

static final String STATE_KEY = "onSave";

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

@Override
protected void onSaveInstanceState(Bundle SavedInstanceState) {
    SavedInstanceState.putString(STATE_KEY, "1");
    super.onSaveInstanceState(SavedInstanceState);//call this at the end
}

@MihajloMilosevic尝试应用两种答案;请同时投票(这里的一个解决了
savedInstanceState
问题,而另一个似乎解决了
NPE
)。看,它不再崩溃了,但它仍然会删除textViewrotating@MihajloMilosevic在
onCreate()
中,检查
是否(savedInstanceState==null)
。。。这表明,如果它是新创建的,是否。如果在此处设置断点,它将显示
null
Bundle
@MihajloMilosevic尝试应用这两个答案;请同时投票(这里的一个解决了
savedInstanceState
问题,而另一个似乎解决了
NPE
)。看,它不再崩溃了,但它仍然会删除textViewrotating@MihajloMilosevic在
onCreate()
中,检查
是否(savedInstanceState==null)
。。。这表明,如果它是新创建的,是否。如果在此处设置断点,它将显示
null
Bundle