gpt4 book ai didi

java - 如何将HashMap保存到文件并加载它

转载 作者:行者123 更新时间:2023-12-01 04:47:07 24 4
gpt4 key购买 nike

我遇到了一个大问题。我想将 HashMap(我将其称为“map”或“hm”)保存到运行应用程序的 Android 设备上的文件中。我确实想将其保存在内部存储中。

我知道类似的问题以前被问过大约 100 个,我尝试了大约 25 个,但没有一个起作用。

我有 3 个类,一个主类扩展了“Activity”,另外两个类,一个称为“util”。我想编写两个方法来保存和加载 HashMap,并且这两个方法都应该位于“util”类中。在主类中,我编写了几个方法来加载 HashMap,在其中放入一些内容,然后再次保存它。

到这里解决我的问题应该不难,但是我想在除主类之外的其他类中使用“保存”和“加载”方法。

不知道如何获取其他类中的Context对象作为主类,所以也不知道如何调用openFileOutput()方法。

总之:我想将 HashMap 保存到我想在内部存储上创建的文件中,或从该文件加载 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();
}

在这个方法中我必须使用Context,并且我不知道如何在其他类中获取它。我还收到“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”...不知道该怎么办。

最佳答案

如果您始终从有权访问 Activity 的类中调用 Util 方法,只需将 Context 添加为方法中的参数即可打电话。

否则,您可以创建一个全局 Application - 可以从中获取上下文的对象。此特定上下文不支持创建 View 和其他与 Activity 相关的选项,但 openFileOutput()/openFileInput() 方法应该没问题,因为该目录位于应用程序上-级别。

为此,您需要创建一个应用程序的子类,并对其自身进行静态引用:

//In the Application subclass:
static MyApplication instance;
onCreate(){
super.onCreate();
instance = this;
}
public static final MyApplication getInstance(){
return instance;
}

然后你可以调用MyApplication.getInstance();来获取Context。

您还必须在 list 中添加您的应用程序类(使用应用程序标签下的名称属性)。

相关阅读: Singletons vs ApplicationContext in android

关于java - 如何将HashMap保存到文件并加载它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15644791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com