我有一个带有两个字符串值和一个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项相关联?毕竟怎么读?
感谢您的回答并抱歉不好的英语。
答案 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);
}