您的位置:首页 > Web前端

SharedPreferences存取更复杂的数据类型

2016-07-17 12:37 387 查看
原文链接http://blog.n8n.cn/?p=366

我们知道SharedPreferences只能保存简单类型的数据,例如,String、int等。

如果想用SharedPreferences存取更复杂的数据类型(类、图像等),就需要对这些数据进行编码。

我们通常会将复杂类型的数据转换成Base64编码,然后将转换后的数据以字符串的形式保存在 XML文件中。

public void saveOAuth(OAuthV1 oAuth_1) {
SharedPreferences preferences = getSharedPreferences("base64",
MODE_PRIVATE);
// 创建字节输出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
// 创建对象输出流,并封装字节流
ObjectOutputStream oos = new ObjectOutputStream(baos);
// 将对象写入字节流
oos.writeObject(oAuth_1);
// 将字节流编码成base64的字符窜
String oAuth_Base64 = new String(Base64.encodeBase64(baos
.toByteArray()));
Editor editor = preferences.edit();
editor.putString("oAuth_1", oAuth_Base64);

editor.commit();
} catch (IOException e) {
// TODO Auto-generated
}
Log.i("ok", "存储成功");
}


之后将其解码:

public OAuthV1 readOAuth() {
OAuthV1 oAuth_1 = null;
SharedPreferences preferences = getSharedPreferences("base64",
MODE_PRIVATE);
String productBase64 = preferences.getString("oAuth_1", "");

//读取字节
byte[] base64 = Base64.decodeBase64(productBase64.getBytes());

//封装到字节流
ByteArrayInputStream bais = new ByteArrayInputStream(base64);
try {
//再次封装
ObjectInputStream bis = new ObjectInputStream(bais);
try {
//读取对象
oAuth_1 = (OAuthV1) bis.readObject();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (StreamCorruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return oAuth_1;
}


需要导入一个包:commons-codec-1.4.jar

链接内容:http://commons.apache.org/codec/download_codec.cgi

本文为《Android/OPhone开发完全讲义》一书的内容连载。转载请注明出处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SharedPref