安卓:将数组保存到应用数据

4

是否可以将整个数组(甚至是ArrayList)保存到Android应用程序数据中?

据我所知,您只能执行putInt、putBoolean或putString之类的操作...... 但是,对于更复杂的数据类型呢? 有没有一种方法可以做到这一点?

还是我必须先将整个数组转换为字符串,然后在加载时解析为数组?

5个回答

3

对于复杂的数据类型,请使用

            Bundle bundle = new Bundle();
            bundle.putSerializable("key", object);
            intent.putExtra("bundle", bundle);

编辑:或者对于数组使用

   putStringArray(key,value);

2
这如何应用于保存应用程序数据,例如SharedPreferences? - Peter Knego
putStringSet(String key, Set<String> values)在首选项编辑器中设置一组字符串值,一旦调用commit()方法就会写回。SharedPreferences.Editor - user370305

1

我认为你可能不知道还有像putFloatArray(key,Value),putStringArray(key,value)这样的函数,你可以使用它们。


这如何应用于保存应用程序数据,例如SharedPreferences? - Peter Knego
谢谢。我有一个ArrayList<String[]>,有没有一种优雅的方法将其存储为String数组? - RazorHail

1

如果你所说的“应用程序数据”是指SharedPreferences,那么不,你只能保存简单类型

但是,你可以通过Activities的onSaveInstanceState / onRestoreInstanceState来保存应用程序状态,如此处所述:使用Save Instance State保存Android Activity状态

请注意,这将每个Activity的状态保存下来,因此最好有一个主Activity来保存应用程序状态。


哇,所以我只需调用super.onSaveInstanceState和super.onRestoreInstanceState。然后一切都会自动保存和加载??? - RazorHail
不需要手动调用,只需在您的Activity中实现这些方法,它们将自动被调用。请参见链接。 - Peter Knego
哦,那么这对我并没有什么帮助,是吧? :) 我想要能够保存更复杂的数据类型。那些方法只是用于保存和加载的方法。但是我应该在哪里以及如何实际保存一个对象呢? - RazorHail

0

你可以对几乎任何形式的数据进行序列化,并将其保存为字节流byte[]

序列化后,使用以下方式存储:

putByteArray("key", serializedData);

0

但这只是在我想将一个对象传输到另一个活动时使用,对吧? 它不会保存任何东西,对吗? - RazorHail
抱歉,我误解了你的问题。Parcelable 对于在活动或进程之间传递数据非常有用。 - hleroy
如果您的数组包含原始类型,请对其进行迭代并将其保存在SharedPreferences中。如果您的数组或ArrayList更复杂,请将其序列化为base64字符串(参见https://dev59.com/mHVC5IYBdhLWcg3w9GLM),并将其保存为字符串形式的SharedPreference。如果您的ArrayList非常大,请考虑使用其他形式的持久存储(写入本地文件或使用SQLite)。 - hleroy
“really large” 是什么意思? 这是一个包含大约20-100个String[]条目的ArrayList。这些条目中只有小字符串(短句)。 - RazorHail

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接