如何将键值对存储在将存储在Android内部存储器中的文件中?

问题描述 投票:1回答:2

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

android memory key-value internals keyvaluepair
2个回答
1
投票

标准的Java存储对象数据的方式是使用序列化 - 这就是它的用途。在大多数情况下,实现Serializable非常简单。 This Site提供了一个很好的序列化基础教程,可以很容易地为Android环境量身定制。

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

那么使用哪个 - Serialization或JSONObject?这实际上取决于效率的重要性以及您想要存储的事物的复杂程度。

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

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


0
投票

一个非常基本的SQLiteDatabase将执行Job。那里有很多教程,你只需要一个包含3列的表:_id,key,value。

我亲自发现This Tutorial是一个很好的起点。

DB总是需要一个上下文来让球滚动,所以对于像这样的简单获取/设置情况,使用以下方法签名创建一个小类将使生活变得简单:

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); 
© www.soinside.com 2019 - 2024. All rights reserved.