对象不可分辨?备择方案?

时间:2015-03-13 19:14:29

标签: android bundle parcelable custom-object

我有一个类/对象,我正在尝试制作Parcelable,所以我可以将对象保存到Bundle(实际上,我会将对象添加到Arraylist然后将此列表保存到,并将其恢复来自Bundle,包含其中的对象)。

我这样做的方法是让对象派生自Serializable

有人建议改为使用Parcelable这个类。但是,我无法实现它,因为此类的其中一个属性是 FloatBuffer ,我无法在Parcelable类中看到将其保存到Bundle的方法。

有没有这样做?或者我运气不好?

1 个答案:

答案 0 :(得分:0)

Parcel类包含名为writeFloatArray(float[])readFloatArray(float[])createFloatArray()的方法,因此您可以使用它们来存储和检索浮点数组。
现在,我没有使用FloatBuffer,但看起来它有方法FloatBuffer#array(),它返回支持此缓冲区的数组。我想你可以从缓冲区中获取数组并将其存储在包裹中 稍后,当您需要对数据进行取消分组时,可以检索先前存储在此处的浮点数组,并通过FloatBuffer#put(float[], int, int)方法将其放入新的FloatBuffer实例中。

修改:如果array()方法未能提供所需的结果,您可以尝试以下操作:

final int size = buffer.remaining();
final float[] floatsArray = new float[size];
buffer.get(floatsArray); 
// now floatsArray contains the values from buffer,
// you can safely put it into the Parcel.