[英]Save HashMap properties to a properties file, and load those properties back to the HashMap
[英]How to save HashMap to a file and load it
我遇到了一個大問題。 我想將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'...不知道該怎么辦。
如果您總是從具有Activity
權限的類中調用Util
方法,則只需將Context
作為參數添加到您的方法調用中。
否則,您可以創建一個全局Application
,從中可以獲取上下文。 這個特定的Context不支持創建View和其他與Activity相關的選項,但是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)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.