【发布时间】:2013-03-26 18:33:14
【问题描述】:
我遇到了一个大问题。我想将 HashMap(我将其称为“map”或“hm”)保存到运行应用程序的 android 设备上的文件中。我确实想将其保存在内部存储中。
我知道这样的问题以前被问过大约 100 个,我尝试了大约 25 个,但都没有奏效。
我有 3 个类,一个扩展“Activity”的主类和两个其他类,一个称为“util”。我想写两个方法,保存和加载 HashMap,这两个方法都应该在 'util' 类中。在主类中,我编写了几个方法来加载 HashMap,在其中放入一些内容,然后再次保存。
到这里解决我的问题应该不难,但我想在除主类之外的其他类中使用“保存”和“加载”方法。
不知道如何获取其他类中的Context对象作为主类,所以不知道怎么调用openFileOutput()方法。
总而言之:我想将 HashMap 保存到我想在内部存储上创建的文件中/从文件中加载。我使用的方法应该位于“util”类中,并且应该可供所有其他类访问,最好以静态方式访问。我尝试了许多不同的可能性,但我总是得到一个“FileNotFoundException”。我希望你能帮助我。
我使用的一些方法:
try {
FileOutputStream fos = c.openFileOutput(s, Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(hm);
oos.flush();
oos.close();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
在这种方法我必须使用上下文,我不知道如何在其他类中获取它。我还收到一个“FileNotFoundException”...
String file = The path where my file should be located (I don't know how it should be given, but "data/data/[packagename]/[file]" does not work)
try {
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(hm);
oos.flush();
oos.close();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
这个方法也不管用,我真的不知道我遇到了什么异常。
最后:如果你想帮助我,请描述如何获取你使用的每个对象(嗯,除了字符串等基本的东西......)并粘贴你的整个解决方案。如果之前确实有人问过这个问题,我真的很抱歉,我找不到它。
编辑
我尝试使用“this.getApplicationContext().getFilesDir()”方法,但仍然收到“FileNotFoundException”...不知道该怎么办。
【问题讨论】:
-
"我真的不知道我遇到了哪个异常..." 如果您希望我们帮助您,这就是我们需要的信息...只是运行您的代码并复制/粘贴堆栈跟踪。这是你至少可以做的......
-
您的
Map中包含哪些类型?Hashmap<String, String>? -
是的,字符串和整数。有时是我的 Enum 类的一种。如果你不(不知道怎么说)把东西放在那些
< / >里,把不同类型的对象放在一个HashMap里会不会有问题? -
好吧,我尝试使用这些方法运行我的应用程序:PasteBin Link 并且使用路径 "data/data/at.enagon.micromon/micromon" 得到了几个 'FileNotFoundExceptions' 。 'at.enagon.micromon' 是我的主要包。