2011-02-24 66 views
0

我正在寻找一种方法来将POJO(包含字符串,布尔值,整数)的值存储在首选变量中,然后我可以通过存储它时使用的密钥进行检索。 POJO包含很多String/boolean/int属性,所以我不想单独存储它们。我遇到的问题是唯一的首选变量类型是String,boolean,float和int。有什么方法可以将POJO转换为字符串,然后我可以通过它的关键字检索回来,并将其转换回POJO,有点像铸造它> 1)填充POJO 2)将POJO转换为字符串 3 )将字符串存储在首选项存储中并使用键值(正常首选存储的东西) 4)需要时,将数据作为字符串从优先存储中取回并将其转换回POJO。如何将POJO的内容存储在偏好存储中?

回答

1

不是最完美的解决方案,但是:

ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
objectOutputStream = new ObjectOutputStream(outputStream); 
objectOutputStream.writeObject(instance); 
objectOutputStream.flush(); 
val = Base64.encodeBase64String(outputStream.toByteArray())); 

要deserialise:

byte[] data = Base64.decodeBase64(dataStr); 
ObjectInputStream objectInputStream = null; 
try 
{ 
    ByteArrayInputStream inputStream = new ByteArrayInputStream(data); 
    objectInputStream = new ObjectInputStream(inputStream); 
    return (T)objectInputStream.readObject(); 
} 
finally { 
    if (objectInputStream != null) 
     objectInputStream.close(); 
} 

其中T是对象类型。

+0

这只有在POJO是'Serializable'的时候才会起作用,然后你就有了所有标准的Java问题(例如版本控制)。 – CommonsWare 2011-02-24 13:01:01

+0

感谢您的开始。关于您的回复中的几个问题: 1)在此POJO的字符串(在将POJO转换为字符串的最后部分)中,'val'是否会存储在偏好存储中以稍后检索? 2)当我得到字符串返回时,如何将字符串转换回我的POJO? 3)我无法找到Base64:我需要为此导入什么? 2) – charlest 2011-03-01 09:10:16

+0

1)是2)更新回答3)Apache Commons Codec项目包含一个很好的Base64实现。 – 2011-03-02 09:15:16