【发布时间】:2014-08-09 04:53:28
【问题描述】:
我正在尝试保存对象列表的状态。对象类中的一个字段是位图。由于位图不可序列化,我已经实现了自己的位图类,该类实现了可序列化。我已经查看了创建此类的其他问题,似乎它应该可以工作。但是当我运行应用程序时,它在我的 serializableBitmap 类中执行 writeObject 方法后立即崩溃。但是当它崩溃时,它并没有说它不幸停止工作,而只是简单地回到主屏幕。它也不会在 LogCat 中输出任何错误消息。所以我不知道是什么导致了崩溃。这是我的 serializableBitmap 类:
public class serializableBitmap implements Serializable {
private static final long serialVersionUID = -5228835919664263905L;
private Bitmap bitmap;
public serializableBitmap(Bitmap b) {
bitmap = b;
}
// Converts the Bitmap into a byte array for serialization
private void writeObject(ObjectOutputStream out) throws IOException {
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
boolean success = bitmap.compress(Bitmap.CompressFormat.PNG, 0, byteStream);
byte bitmapBytes[] = byteStream.toByteArray();
if (success)
out.write(bitmapBytes, 0, bitmapBytes.length);
}
// Deserializes a byte array representing the Bitmap and decodes it
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
int b;
while((b = in.read()) != -1)
byteStream.write(b);
byte bitmapBytes[] = byteStream.toByteArray();
bitmap = BitmapFactory.decodeByteArray(bitmapBytes, 0, bitmapBytes.length);
}
public Bitmap getBitmap() {
return this.bitmap;
}
}
任何帮助将不胜感激。
哦,在包含位图的对象类中,我实现了 Parcelable,然后在我调用的 writeToParcel 方法中
dest.writeList(bitmaps);
位图是
private ArrayList<serializableBitmap> bitmaps;
【问题讨论】:
-
在压缩方法中,您将质量设置为零。这可不好。
-
您可以保存一个状态变量,然后重新加载与该数字对应的位图。
标签: java android serializable android-bitmap