0

我有一个具有两个字符串值和一个可绘制对象的对象(或者它可能是位图 - 没关系)。我从 WEB 获取图片。在我的项目中,我需要在 ArrayList 中保存几个对象以供进一步使用。

该 ArrayList 用于使用自定义适配器填充 ListView。

现在我使用这些方法从文件中写入和读取 ArrayList。它使用序列化。

public final class InternalStorage{

private InternalStorage() {}

public static void writeObject(Context context, String key, Object object) throws IOException {
    FileOutputStream fos = context.openFileOutput(key, Context.MODE_PRIVATE);
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(object);
    oos.close();
    fos.close();
}

public static Object readObject(Context context, String key) throws IOException,
        ClassNotFoundException {
    FileInputStream fis = context.openFileInput(key);
    ObjectInputStream ois = new ObjectInputStream(fis);
    Object object = ois.readObject();
    return object;
} }

问题是 Drawable 或 Bitmap 对象不可序列化。那么我想怎么做才能将可绘制对象与 ArrayList 的每个序列化对象一起存储?也许我需要以某种方式将每个存储的图像文件与每个 ArrayList 项目相关联?到底怎么读呢?

感谢您的回答,抱歉英语不好。

4

2 回答 2

1

无论如何,您都不想序列化位图,因为纯像素缓冲区会很大。使用 Bitmap 的 compress 方法

ByteArrayOutputStream baos = new ByteArrayOutputStream();  
immage.compress(Bitmap.CompressFormat.JPEG, 100, baos);
于 2014-07-06T14:10:32.530 回答
1

保存这些图像的 ByteArray 然后你可以恢复它。

使用这些功能..

 public static byte[] convert(Bitmap bitmap) throws IOException {
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG,100,stream);
    byte[] array = stream.toByteArray();
    stream.close();
    return array;


}
public static Bitmap convert(byte[] array) {
    return BitmapFactory.decodeByteArray(array,0,array.length);
}
于 2014-07-06T14:10:39.307 回答