重启设备后检索HashMap

时间:2012-09-19 13:02:05

标签: java android hashmap

我有一个带有整数+对象的HashMap,但是一旦关闭并打开设备,列表就会消失,我需要能够在之后检索数据,否则我的HashMap毫无意义。我已经尝试过Bundles,使用HashMap扩展Serializable和我正在放入的对象。有没有人知道如何做到这一点?我认为最好的方法是ObjectOutputStream,但我无法弄清楚如何做到这一点。任何人都可以指导我这个教程/示例或者能给我一个快速的吗?

备受赞赏

5 个答案:

答案 0 :(得分:4)

  

关闭并打开设备后,列表消失了

退出或重新启动应用程序时,列表也已消失。为此创建数据库。

See here

答案 1 :(得分:2)

Java对象 - 即使那些可以序列化的对象 - 只有在您的进程处于活动状态时才会存在,除非您采取措施实际序列化它们并持久存储数据。有几种选择,包括SQLite数据库或SharedPreferences。 Read this guide

答案 2 :(得分:1)

您可以使用以下代码将数据保存到SharedPreferances

    Map<Integer, Object> aMap = new HashMap<Integer, Object>();
    aMap.put(String.valueOf(1), object1);
    aMap.put(String.valueOf(2), object2);
    aMap.put(String.valueOf(3), object3);

    SharedPreferences keyValues = getSharedPreferences("Your_Shared_Prefs", Context.MODE_PRIVATE);
    SharedPreferences.Editor keyValuesEditor = keyValues.edit();

    for (Integer s : aMap.keySet()) {
        keyValuesEditor.putString(String.valueOf(s), toString(aMap.get(s)));
    }
    keyValuesEditor.commit();

从那里采用toString()方法:How to serialize an object into a string

然后重新打开应用程序调用smth后:

    SharedPreferences keyValues = getSharedPreferences("Your_Shared_Prefs", Context.MODE_PRIVATE);
    Map<Integer, Object> map = new HashMap<Integer, Object>();
    for (String key : keyValues.getAll().keySet()) {
        map.put(Integer.valueOf(key), fromString(keyValues.getString(key, null)));
    }

答案 3 :(得分:0)

为了将数据存储到手机,内容提供商是您的最佳选择。它们并不是最容易开始的。但是在android中提供了一个示例Notes应用程序,它实现了一个简单的内容提供程序。

退房 http://developer.android.com/guide/topics/providers/content-providers.html

但更重要的是这个 http://developer.android.com/guide/topics/providers/content-provider-creating.html 其中包含有关记事本示例应用程序的详细信息

或者看到这个问题 How to store hashmap so that it can be retained it value after a device reboot?

答案 4 :(得分:0)

Samir Mangroliya说。重新启动手机时,Hashmap中的所有数据都已消失。考虑使用SQLite保存数据。我会将Integer保存为Primary Key到数据库中的每一列。