在android中更改方向后无法保存值

在android中更改方向后无法保存值,android,android-orientation,Android,Android Orientation,我尝试在使用onsaveinstancestate和onrestoreinstancestate旋转设备时保存值,但当我尝试在oncreate after orientation中提取数据时,它总是返回null。下面是我的代码 @Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { super.onSaveInstanceState(outS

我尝试在使用onsaveinstancestate和onrestoreinstancestate旋转设备时保存值,但当我尝试在oncreate after orientation中提取数据时,它总是返回null。下面是我的代码

   @Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
    super.onSaveInstanceState(outState, outPersistentState);
   outState.putString("driverscore",mdriverscore.getText().toString());
    outState.putString("lastevent",recentevent.getText().toString());
    outState.putString("rashdrivingcounttext",rdcount.getText().toString());
    outState.putString("prespeedlimitcounttext",pslcount.getText().toString());
    outState.putString("corneringcounttext",cornering.getText().toString());
    outState.putInt("rashdrivingcount",mrdcount);
    outState.putInt("prespeedlimitcount",mpslcount);
    outState.putInt("corneringcount",mcornering);
    outState.putInt("newrdcount",scorerd);
    outState.putInt("newpslcount",scorepsl);
    outState.putInt("newcornercount",scorecorner);
    outState.putInt("distance",distance);
    outState.putBoolean("istripinprogress",istripinprogress);
    outState.putBoolean("ispersonidle",ispersonidle);
}
     @Override
public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState) {
    super.onRestoreInstanceState(savedInstanceState, persistentState);
    mdriverscore.setText(savedInstanceState.getString("driverscore"));
    recentevent.setText(savedInstanceState.getString("lastevent"));
    rdcount.setText(savedInstanceState.getString("rashdrivingcounttext"));
    pslcount.setText(savedInstanceState.getString("prespeedlimitcounttext"));
    cornering.setText(savedInstanceState.getString("corneringcounttext"));
    mrdcount = savedInstanceState.getInt("rashdrivingcount");
    mpslcount = savedInstanceState.getInt("prespeedlimitcount");
    mcornering = savedInstanceState.getInt("corneringcount");
    scorerd = savedInstanceState.getInt("newrdcount");
    scorepsl = savedInstanceState.getInt("newpslcount");
    scorecorner = savedInstanceState.getInt("newcornercount");
    distance = savedInstanceState.getInt("distance");
    istripinprogress =savedInstanceState.getBoolean("istripinprogress");
    ispersonidle = savedInstanceState.getBoolean("ispersonidle");
}
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.newxml);
    if (savedInstanceState != null) {
        istripinprogress = savedInstanceState.getBoolean("istripinprogress");
        ispersonidle = savedInstanceState.getBoolean("ispersonidle");
        mrdcount =savedInstanceState.getInt("rashdrivingcount");
    }

mrdcount返回null istripinprogress,ispersonidle返回默认值未保存值

您必须覆盖
void onSaveInstanceState(Bundle outState)

void onSaveInstanceState(Bundle outState,PersistableBundle outPersistentState)

这与onSaveInstanceState(Bundle)相同,但为 属性persistableMode设置为的创建的活动 持久的红豆树


是否有任何具体的原因,你正在使用

public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) 
而不是

public void onSaveInstanceState(Bundle outState)
请使用单参数函数,即
public void onSaveInstanceState(Bundle outState)
public void onRestoreInstanceState(Bundle savedInstanceState)
,然后您的
onCreate将能够从Bundle中获得值


希望这有帮助

onRestoreInstanceState是冗余的,因为您可以在onCreate中轻松恢复状态

     @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
       outState.putString("driverscore",mdriverscore.getText().toString());
        outState.putString("lastevent",recentevent.getText().toString());
        outState.putString("rashdrivingcounttext",rdcount.getText().toString());
        outState.putString("prespeedlimitcounttext",pslcount.getText().toString());
        outState.putString("corneringcounttext",cornering.getText().toString());
        outState.putInt("rashdrivingcount",mrdcount);
        outState.putInt("prespeedlimitcount",mpslcount);
        outState.putInt("corneringcount",mcornering);
        outState.putInt("newrdcount",scorerd);
        outState.putInt("newpslcount",scorepsl);
        outState.putInt("newcornercount",scorecorner);
        outState.putInt("distance",distance);
        outState.putBoolean("istripinprogress",istripinprogress);
        outState.putBoolean("ispersonidle",ispersonidle);
    }

       @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.newxml);
        if (savedInstanceState != null) {
 mdriverscore.setText(savedInstanceState.getString("driverscore"));
        recentevent.setText(savedInstanceState.getString("lastevent"));
        rdcount.setText(savedInstanceState.getString("rashdrivingcounttext"));
        pslcount.setText(savedInstanceState.getString("prespeedlimitcounttext"));
        cornering.setText(savedInstanceState.getString("corneringcounttext"));
        mrdcount = savedInstanceState.getInt("rashdrivingcount");
        mpslcount = savedInstanceState.getInt("prespeedlimitcount");
        mcornering = savedInstanceState.getInt("corneringcount");
        scorerd = savedInstanceState.getInt("newrdcount");
        scorepsl = savedInstanceState.getInt("newpslcount");
        scorecorner = savedInstanceState.getInt("newcornercount");
        distance = savedInstanceState.getInt("distance");
            istripinprogress = savedInstanceState.getBoolean("istripinprogress");
            ispersonidle = savedInstanceState.getBoolean("ispersonidle");


               mrdcount =savedInstanceState.getInt("rashdrivingcount");
            }
}
以下是官方文件对onRestoreInstanceState的说明:


大多数实现只需使用onCreate(Bundle)来恢复其状态,但有时在完成所有初始化后在此处执行此操作或允许子类决定是否使用默认实现是方便的。

尝试在清单文件活动android:configChanges中添加这两个属性=“键盘隐藏|方向”