Android 如何读/写列表<;日期>;寄包裹?
我有一个类实现了Android 如何读/写列表<;日期>;寄包裹?,android,date,serialization,parcelable,parcel,Android,Date,Serialization,Parcelable,Parcel,我有一个类实现了Parcelable。将日期对象的列表读/写到包裹的最佳方式是什么 这是如何为单个日期对象执行此操作的: date = new Date(parcel.readLong()); //read parcel.writeLong(date.getTime()); //write 但是如何为列表执行此操作 我想写的笨拙方法是循环所有Date对象并构造一个long[],如下所示: long[] datesAsLongs = new long[dates.size(
Parcelable
。将日期
对象的列表
读/写到包裹
的最佳方式是什么
这是如何为单个日期对象执行此操作的:
date = new Date(parcel.readLong()); //read
parcel.writeLong(date.getTime()); //write
但是如何为列表执行此操作
我想写的笨拙方法是循环所有Date
对象并构造一个long[]
,如下所示:
long[] datesAsLongs = new long[dates.size()];
for (int i = 0; i < dates.size(); i++)
datesAsLongs[i] = dates.get(i).getTime();
parcel.writeLongArray(datesAsLongs);
long[]datesAsLongs=新的long[dates.size()];
对于(int i=0;i
要阅读,你可以:
dates = new ArrayList<Date>();
for (long dateAsLong : parcel.createLongArray())
dates.add(new Date(dateAsLong));
dates=newarraylist();
for(long dateAsLong:parcel.createLongArray())
日期。添加(新日期(dateAsLong));
但我希望会有更好的东西…因为Date是一个可序列化的对象,您应该能够使用:
最坏的情况下,您可以使用是的,我已经考虑过了,但是List
没有实现Serializable
(即使ArrayList
实现了),所以您必须强制转换它。如果可能的话,我不想那样做。更不用说writeSerializable()
对性能有影响…List是一个接口,它不能实现序列化,您的List
对象实际上是一个具有List方法的日期数组列表。我不清楚您为什么没有使用writeList()
。通过“更不用说writeSerializable()具有性能影响…”我假设您已经阅读了包裹文档,但是您是否阅读了非类型化容器上的选择readList()
和writeList()
是您想要的方法。不,我的Date
对象列表不保证是ArrayList
。。。它所在的类有一个公共的setDates(List dates)
setter,所以我不能假设它总是ArrayList
。这就是为什么我特意在这个问题的标题中写了List
。谢谢你的回答,我明白了。虽然我可能太短视,考虑其他类型的列表实现在这里,开发人员不在这里。我刚刚用LinkedList、Stack和Vector测试了writeList()
和readList()
。我还查看了源代码,这些方法应该适用于任何实现List的类。“你知道这种日期对象的通用序列化是否会降低性能吗?”我做了一些简单的测试,但没有注意到明显的区别。。。但是考虑到文档警告,当你完成应用程序的编写后,你应该写一张便条,在DDMS中仔细检查自己。
List<Date> list = new ArrayList<Date>();
parcel.writeList(list);
List<Date> list = new ArrayList<Date>();
parcel.writeValue(list);