2013-03-26 30 views
0

我遇到了一個主要問題。我想將一個HashMap(我稱它爲'map'或'hm')保存到應用程序運行的android設備上的一個文件中。我確實想將它保存在內部存儲器上。如何將HashMap保存到文件並加載它

我知道這樣的問題之前曾被問過像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異常' ......不知道該怎麼辦。

+4

「_I真的不知道我該例外..._」如果你要我們幫助你,這是我們所需要的那種信息...只是運行編碼並複製/粘貼堆棧跟蹤。這是你至少可以做的...... – jlordo

+0

你的'Map'包含哪些類型? 'Hashmap '? – nattyddubbs

+0

是的,字符串和整數。有時候是我的Enum類的一種類型。將不同類型的對象放在一個HashMap中是否存在問題(如果你不知道如何說)將這些東西放在那些''中? – Enagon

回答

0

如果您始終將您的Util-方法從訪問Activity的類中調用,則只需在方法調用中添加Context作爲參數即可。

否則,您可以創建一個全局對象Application,您可以從中獲取上下文。這個特定的上下文不支持創建視圖和其他依賴於Activity的選項,但由於該目錄位於應用程序級別上,因此方法應該沒問題。

要做到這一點,你將創建應用程序的一個子類具有靜態參考自己:

//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)。

相關閱讀: Singletons vs ApplicationContext in android

+0

謝謝,這真的幫助了我! :) – Enagon

相關問題