0

我正在开发一个 Android 应用程序。我在活动中使用 onSaveInstanceState 事件进行测试。但它没有像我预期的那样工作,因为当我在 onCreate 事件中检索它时,值字符串总是空的。

这是我的活动

@Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        super.onSaveInstanceState(outState, outPersistentState);
        outState.putString("message","Hello world!");
    }

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(savedInstanceState!=null)
    {
        Toast.makeText(getBaseContext(),savedInstanceState.getString("message"),Toast.LENGTH_SHORT).show();
        //Log.i("DATA_FROM_STATE",savedInstanceState.getString("message"));
    }
}

当我运行活动并改变方向时,它总是在烤空消息。当我测试取消注释 Log 行时,它给了我错误,因为数据字符串为空或 null。为什么它不工作?如何正确保存和检索?

4

2 回答 2

1

错误的方法覆盖。应该使用 onSaveInstanceState(Bundle outState) 并且它会起作用。您可以复制下面的代码片段并进行测试。

public class MainActivity extends AppCompatActivity {

    private final String SAVED_MESSAGE_KEY = "SAVED_MESSAGE";

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

        if(savedInstanceState != null) {
            if(savedInstanceState.containsKey(SAVED_MESSAGE_KEY)) {
                Log.i("Saved message is:", savedInstanceState.getString(SAVED_MESSAGE_KEY));
            }
        }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString(SAVED_MESSAGE_KEY, "Hello world!");
    }
}
于 2016-06-05T09:20:13.717 回答
0

乍一看,我看到您在保存数据之前正在调用 super 我猜您的应用程序运行在 API21+ 版本的 Android 上,因为需要调用您的方法

public void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState);

@Override
    public void onSaveInstanceState(Bundle outState,PersistableBundle outPersistentState) {
        outState.putString("message","Hello world!");
        super.onSaveInstanceState(outState, outPersistentState);

    }
于 2016-06-05T09:23:25.560 回答