将可绘制或位图存储在内部存储中

时间:2014-07-06 14:04:21

标签: java android arraylist drawable internal-storage

我有一个带有两个字符串值和一个drawable的对象(或者它可能是位图 - 并不重要)。我从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对象不可序列化。 那么我想将存储drawable与ArrayList的每个序列化对象一起存储呢? 也许我需要以某种方式将每个存储的图像文件与每个ArrayList项相关联?毕竟怎么读?

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

2 个答案:

答案 0 :(得分:1)

你不想序列化位图,因为纯像素缓冲区会很大。在Bitmap上使用compress方法

ByteArrayOutputStream baos = new ByteArrayOutputStream();  
immage.compress(Bitmap.CompressFormat.JPEG, 100, baos);

答案 1 :(得分: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);
}