簡體   English   中英

如何將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)。

相關閱讀: Android中的Singletons與ApplicationContext

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM