0

我有一个带有 Integer+Object 对的 HashMap,但是一旦设备关闭再打开,列表就消失了,我需要能够在之后检索数据,否则我的 HashMap 毫无意义。我试过 Bundles,用 HashMap 和我放入的对象扩展 Serializable。有谁知道如何做到这一点?我在想最好的方法是 ObjectOutputStream 但我就是不知道该怎么做。任何人都可以指导我看这个教程/示例,或者可以给我一个快速的吗?

非常感激

4

5 回答 5

4

一旦设备关闭和打开,列表就消失了

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

看这里

于 2012-09-19T13:03:45.957 回答
2

Java 对象——即使是那些可以被序列化的对象——只有在你的进程还活着的时候才是活着的,除非你采取措施来实际序列化它们并持久地存储你的数据。为此有几个选项,包括 SQLite 数据库或 SharedPreferences。阅读本指南

于 2012-09-19T13:09:59.897 回答
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()获取方法:如何将对象序列化为字符串

然后像这样重新打开应用程序调用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)));
    }
于 2012-09-19T13:22:30.350 回答
0

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

查看 http://developer.android.com/guide/topics/providers/content-providers.html

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

或请参阅此问题 如何存储 hashmap 以便在设备重启后保留它的值?

于 2012-09-19T13:08:10.063 回答
0

正如萨米尔·曼格罗利亚所说。Hashmap当您重新启动手机时,您的所有数据都消失了。考虑使用SQLite来保存数据。我会将其保存IntegerPrimary Key数据库中的每一列。

于 2012-09-19T13:16:50.030 回答