首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android SharedPreferences 存儲複雜數據的三種方案

     編輯:程式設計綜合問答

在 Android 中如何用 SharedPreferences 存儲數組或對象數據

SharedPreferences 僅支持基本類型(String、int、boolean 等),若需存儲列表、對象或巢狀結構,需採用序列化策略。本文對比三種主流方案,助你根據場景選型。

方案一:使用 Set<String> (API 11+)

直接存儲字符串集合,適合簡單的 ID 列表或標籤。

// 存儲
Set<String> categories = new HashSet<>(Arrays.asList("news", "sports", "tech"));
prefs.edit().putStringSet("user_categories", categories).apply();

// 讀取
Set<String> saved = prefs.getStringSet("user_categories", new HashSet<>());

缺點:不保證順序,無法存儲非字符串對象,部分舊設備實現有 Bug。

方案二:字符串分隔符拼接

用特殊字符(如 |, ,, #)連接多值,解析時 split()。

// 存儲
String joined = TextUtils.join(",", new String[]{"item1", "item2", "item3"});
prefs.edit().putString("items", joined).apply();

// 讀取
String[] items = TextUtils.split(prefs.getString("items", ""), ",");

缺點:數據中若包含分隔符需轉義,維護成本高,不適合複雜結構。

方案三:JSON 序列化(推薦)

利用 Gson、Moshi 或 Kotlinx.serialization 將對象轉為 JSON 字符串存儲,支撐任意複雜度。

// 依賴 Gson
implementation 'com.google.code.gson:gson:2.10+'

// 存儲對象列表
List<Category> list = ...;
String json = new Gson().toJson(list);
prefs.edit().putString("categories_json", json).apply();

// 讀取並反序列化
Type type = new TypeToken<List<Category>>(){}.getType();
List<Category> restored = new Gson().fromJson(prefs.getString("categories_json", "[]"), type);

優勢:類型安全、結構清晰、易擴展、跨平台兼容。

選型建議

場景推薦方案
簡單標籤/ID 集合,無序Set<String>
極簡鍵值對,數據量極小分隔符字符串
對象列表、巢狀結構、需查詢/修改單項JSON 序列化

此外,若數據量較大(超過 100KB)或需頻繁查詢,建議改用 Room 數據庫或 DataStore,避免阻塞主線程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved