Java 返回活动时Android HashMap未持久化

Java 返回活动时Android HashMap未持久化,java,android,hashmap,persistence,instance,Java,Android,Hashmap,Persistence,Instance,当我导航到另一个活动并返回时,我试图保留HashMap值。这是我现在的代码 HashMap可以工作,并且能够从视图中的EditText中获取和保存数据 但是,一旦我离开活动并返回,HashMap就会重新初始化为empty->{} 我看过文档,这似乎是确保变量数据持久化的正确方法。但是,它不起作用 请让我知道可能的问题: public class ScriptActivity extends MainActivity { HashMap timeAndMessages; Edit

当我导航到另一个活动并返回时,我试图保留HashMap值。这是我现在的代码

HashMap可以工作,并且能够从视图中的EditText中获取和保存数据

但是,一旦我离开活动并返回,HashMap就会重新初始化为empty->{}

我看过文档,这似乎是确保变量数据持久化的正确方法。但是,它不起作用

请让我知道可能的问题:

public class ScriptActivity extends MainActivity {

    HashMap timeAndMessages;
    EditText message;
    EditText time;



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

        if (savedInstanceState != null) {
            timeAndMessages = (HashMap) savedInstanceState.getSerializable("alerts");
        } else {
            timeAndMessages = new HashMap();
        }

        message = (EditText)findViewById(R.id.messageText);
        time = (EditText)findViewById(R.id.timeText);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);

        restore(savedInstanceState);
    }

    private void restore(Bundle savedInstanceState) {
        if (savedInstanceState != null) {
            timeAndMessages = (HashMap) savedInstanceState.getSerializable("alerts");

        }
    }

    public void createMessage (View view){

        String stringmessage = message.getText().toString();
        int inttime = Integer.parseInt(time.getText().toString());

        timeAndMessages.put(inttime, stringmessage);

        Toast.makeText(getApplicationContext(), "Will display : " + stringmessage + " At time : " + Integer.toString(inttime) , Toast.LENGTH_LONG).show();
    }

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        super.onSaveInstanceState(outState, outPersistentState);
        outState.putSerializable("alerts", timeAndMessages);
    }
}
但是,一旦我离开活动并返回,HashMap就会重新初始化为empty->{}

如果说“离开活动并返回”,你的意思是按后退按钮,然后做一些事情开始新的活动。。。那么你的行为是意料之中的

保存的实例状态的
捆绑包
用于两种主要场景:

  • 配置更改(例如,用户旋转屏幕)
  • 进程终止,用户返回到您最近的任务(例如,通过概览屏幕)
压回去破坏活动不是这些。因此,状态不会被保存

如果此
HashMap
表示模型数据-无论用户如何使用应用程序,您都希望能够一次又一次地返回到的数据类型-将其保存到数据库、
SharedReferences
、其他类型的文件或“云”


您可以在中阅读有关这些场景的更多信息。

首先,我们看不到您的
restore()
方法。其次,您的
onSaveInstanceState()
方法将仅在API级别21+的设备上使用。如果
minSdkVersion
低于21,则可能需要只接受
捆绑包的
onSaveInstanceState()
版本。第三,这些实例状态不适用于任意场景,而仅适用于特定场景(例如,配置更改)。请编辑您的问题,并解释“在活动中导航和导航”的含义。您可以发布“timeAndMessages”声明和初始化代码吗?如果它是用户定义对象的集合,那么请发布POJO。@Commonware我有API级别23。添加/删除outPersistentState似乎不会影响code@ShadabAnsari我发布了活动的完整代码。让我知道,如果你有和答案!导航到另一个活动而不完成它并返回到它将不会重新启动以前的活动。因此,您将无法获得已保存的状态。