2011-09-01 83 views
1

我有一些信息需要存儲在內部存儲器中。我希望以其在SharedPreferences中完成的方式以鍵值對的形式進行存儲。我正在考慮創建JsonObject並以這種方式進行保存和檢索。有沒有其他方法可以將數據以鍵值對的形式保存在內部存儲器中?如何將鍵值對存儲在將存儲在Android內部存儲器中的文件中?

問候 蘇尼爾

+0

嘗試使用哈希映射.. –

+0

我能到HashMap中存儲的文件然後再檢索它? – sunil

+0

是的,你可以做到這一點。 –

回答

1

釷存儲對象數據的標準Java方法是使用序列化 - 也就是它是有什麼。在大多數情況下,實現Serializable是相當直接的。 This Site提供了一個關於序列化基礎知識的好教程,可以很容易地爲Android環境量身定製。

通過創建HashMap,您可以將HashMap序列化爲文件,以便以鍵/值形式輕鬆檢索您的數據。幾乎所有的庫集合都支持Serializable,所以你也可以存儲其他類型的Map/List。

那麼使用哪個 - 序列化或JSONObject?這真的取決於效率是多麼重要,以及你想存儲的東西有多複雜。

通常,無論哪種情況,最大的成本都是將數據寫入文件的實際行爲,因此,由於JSONObjects幾乎總是更小更簡單,因此它們可能會更快一些。這對存儲字符串或非常簡單的對象來說很好,它可以輕鬆地轉換爲JSON。如果您有一個非常複雜的類,有很多成員和很多可能的狀態,使用序列化可能會更簡單和高效。在大多數情況下,這些選項之間的實際成本差異可以忽略不計,並且只有在許多次執行讀寫操作時纔會真正起作用。

所以使用JSON的基本類型和序列化的複雜類型(你甚至可以存儲序列化對象的JSON對象!)

0

一個非常基本的SQLiteDatabase將做的工作。這裏有很多教程,你需要的只是一個包含3列的表:_id,key,value。

我個人發現This Tutorial是一個很好的起點。

DB的總是需要上下文來讓球滾動,所以對於這樣一個簡單的get/set的情況下,用下面的方法簽名創建一個較小的類將讓生活真正的輕鬆:

public static void set(Context context, String key, String value); 
public static String get(Context context, String key); 

更多複雜的對象,請使用Parcelable或序列號:

public static void set(Context context, String key, Serializable value); 
public static Serializable(Context context, String key); 
+0

非常感謝,但我已經知道數據庫和SharedPreferences。我只需要將信息保存在內部內存中,因爲即使用戶清除了應用程序的緩存,該信息也不會丟失。 – sunil

+0

使用SQLiteDatabase *將*保存到內部存儲器。您可以選擇是否將其保存在緩存部分中。 – Dave

+0

對不起,你的問題並沒有說你要求數據是'不可分割的'。我不確定如何防止數據庫擦除,除非我相信這隻適用於系統應用程序。 –

相關問題