我需要实现一个登录活动来维护登录用户的历史记录。每个用户还附加了一个图像(位图)。当用户成功登录时,我需要更新本地存储中持久存储的用户历史记录。
由于位图,我无法序列化包含用户的arraylist。
以下是用户类代码:
public class User implements Serializable
{
private String username;
private String systemUserID;
private Date loginDate;
private Bitmap image;
如何实现arraylist序列化以便能够存储用户的arraylist?我在网上压缩并找到一个提示将位图转换为字节数组。
这是如何运作的?
提前致谢!
答案 0 :(得分:0)
在使用Serializable接口之前,您应该总是暂停一下。使用它有很大的潜力回来咬你的屁股。但我离题了。位图不是可序列化的,所以就这样你运气不好。也就是说,你的问题仍然是一个很好的解决方案。您只需跟踪SQLite数据库中的所有内容,而不是序列化每个User对象。就位图而言,只需将其存储在SDCard中,您就可以将数据库存储到它的文件路径中。 SQLite数据库通常是我们在android中执行持久存储的方式。
答案 1 :(得分:0)
我没有实现这种特定类型的逻辑,但这里大致是你需要做的。
writeObject( )/readObject( )
添加到User
课程。Buffer
和您的输出/输入流之间传输数据。答案 2 :(得分:0)
如果Bitmap不可序列化,则必须将其标记为瞬态并为其提供自己的自定义序列化(实现readObject和writeObject),比如将其内容写为二进制数据(或更复杂)。
private void writeObject(ObjectOutputStream oos) throws IOException {
byte[] bitmapInBytes = convertToBytes(bitmap);
oos.defaultWriteObject();
oos.writeObject(bitmapInBytes);
}
你可以找出相反的方向。请记住,(自定义)序列化按FIFO顺序排列,这意味着您应该按照编写它的顺序读取数据。