返回活动时,Android HashMap不会持久存在

时间:2016-04-08 22:08:00

标签: java android hashmap persistence instance

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

HashMap可以在视图中抓取并保存EditText中的数据。

然而,只要我离开活动并返回,HashMap就会重新初始化为空 - > {}

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

请让我知道可能是什么问题:

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);
    }
}

1 个答案:

答案 0 :(得分:0)

  

然而,只要我离开活动并返回,HashMap就会重新初始化为空 - > {}

如果通过“离开活动并返回”,则表示按下“返回”按钮,然后执行某些操作以启动新活动...然后您的行为将被预期。

保存的实例状态的Bundle用于两个主要方案:

  • 配置更改(例如,用户旋转屏幕)
  • 流程终止,用户返回到您最近的任务(例如,通过概览屏幕)

按BACK以销毁活动既不是那些。因此,国家没有得救。

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

您可以在the Activity documentation中了解有关这些方案的更多信息。