2

我有一些信息需要存储在内部存储器中。我想以键值对的形式存储它在 SharedPreferences 中的方式。我正在考虑创建 JsonObject 并以这种方式保存和检索。还有其他方法可以将数据以键值对的形式保存在内存中吗?

4

2 回答 2

1

存储对象数据的标准 java 方法是使用序列化 - 这就是它的用途。在大多数情况下,实现 Serializable 是相当直接的。这个站点提供了一个很好的序列化基础教程,可以很容易地适应 Android 环境。

通过创建 HashMap,您可以将 HashMap 序列化为文件,以便以键/值形式轻松检索数据。几乎所有库集合都支持可序列化,因此您还可以存储其他类型的 Map/List。

那么使用哪个 - 序列化或 JSONObject?这实际上取决于效率的重要性以及您要存储的内容的复杂程度。

通常,在任何一种情况下,最大的成本都是将数据写入文件的实际操作,因此,由于 JSONObjects 几乎总是更小更简单,它们可能会更快一些。这对于存储可以轻松转换为 JSON 的字符串或非常简单的对象是很好的,如果您有一个非常复杂的类,其中包含数十个成员和许多可能的状态,使用序列化可能更简单和高效。在大多数情况下,这些选项之间的实际成本差异可以忽略不计,并且只有在您必须执行多次读取和写入时才真正重要。

因此,对基本类型使用 JSON,对复杂类型使用序列化(您甚至可以将序列化对象存储在 JSON 对象中!)

于 2011-09-02T05:18:54.930 回答
0

一个非常基本的 SQLiteDatabase 将完成这项工作。那里有大量教程,您只需要一个包含 3 列的表:_id、键、值。

我个人认为本教程是一个很好的起点。

DB 总是需要一个上下文来让球滚动,所以对于像这样一个简单的 get/set 情况,创建一个具有以下方法签名的小类将使生活变得非常容易:

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

对于更复杂的对象,使用 Parcelable 或 Serialization:

public static void set(Context context, String key, Serializable value);
public static Serializable(Context context, String key); 
于 2011-09-01T10:50:34.063 回答