我遇到了一个重大问题。我想将HashMap(我称之为'map'或'hm')保存到运行应用程序的android设备上的文件中。我确实想把它保存在内部存储器上。
我知道像这样的问题之前被问过100次,我尝试了其中的25个,但没有一个有效。
我有3个类,一个扩展'Activity'的主类和另外两个类,一个叫'util'。我想编写两个方法来保存和加载HashMap,这两个方法都应该在'util'类中。在主类中,我编写了几个方法来加载HashMap,在其中加入一些东西,然后再次保存。
直到这里解决我的问题应该不难,但我想在除主类之外的其他类中使用'save'和'load'方法。
我不知道如何将其他类中的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();
}
在这种方法中我必须使用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'...不知道该怎么做。
答案 0 :(得分:0)
如果您始终通过可以访问Util
的类调用Activity
- 方法,只需在方法调用中添加Context
作为参数。
否则,您可以创建一个全局Application
- 对象,您可以从中获取上下文。此特定上下文不支持创建视图和其他依赖于活动的选项,但openFileOutput()
/ openFileInput()
- 方法应该没问题,因为目录位于应用程序级别。
为此,您将创建一个Application子类,并为其自身提供静态引用:
//In the Application subclass:
static MyApplication instance;
onCreate(){
super.onCreate();
instance = this;
}
public static final MyApplication getInstance(){
return instance;
}
然后你可以调用MyApplication.getInstance();
来获得一个上下文。
您还必须在清单中添加您的应用程序类(在application-tag下使用name-attribute)。