SharedPreferences详解(二)——存取对象

简介: MainActivity如下:package cc.object;import java.io.ByteArrayInputStream;import java.
MainActivity如下:
package cc.object;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import android.os.Bundle;
import android.util.Base64;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
/**
 * Demo描述:
 * 利用SharedPreferences存取对象Object
 * 注意该Object需要实现Serializable接口
 * 
 * 参考资料:
 * 1 http://blog.csdn.net/tangnengwu/article/details/37881087
 * 2 http://blog.csdn.net/lfdfhl/article/details/37742775
 * 3 http://blog.csdn.net/lfdfhl/article/details/17998469
 * 4 http://blog.csdn.net/lfdfhl/article/details/10961459
 *   Thank you very much
 * 
 */
public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
	}
	
	
	private void init(){
		saveObjectToSharedPreferences();
		getObjectFromSharedPreferences();
	}
	
	
	/**
	 * 将Object对象保存至SharedPreferences
	 */
	private void saveObjectToSharedPreferences(){
		try {
			User user=new User("zxx", "95279527");
			SharedPreferences sharedPreferences=getSharedPreferences("user", Context.MODE_PRIVATE);
			Editor editor=sharedPreferences.edit();
			//第一步:将对象保存至对象输出流ObjectOutputStream
			ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
			ObjectOutputStream objectOutputStream=new ObjectOutputStream(byteArrayOutputStream);
			objectOutputStream.writeObject(user);
			//第二步:将ByteArrayOutputStream中的对象转换成字节数组byte
			byte[] byteArray=byteArrayOutputStream.toByteArray();
			byte[] base64ByteArray=Base64.encode(byteArray, Base64.DEFAULT);
			//第三步:将Base64字节数组转换成String且保存至SharedPreferences
			String userString=new String(base64ByteArray);
			editor.putString("userString", userString);
			editor.commit();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	
	
	/**
	 * 从SharedPreferences获取对象
	 */
	private void getObjectFromSharedPreferences(){
		try {
			SharedPreferences sharedPreferences=getSharedPreferences("user", Context.MODE_PRIVATE);
			//第一步:从SharedPreferences取出字符串形式的Object
			String userString=sharedPreferences.getString("userString", "");
			//第二步:将字符串转换成Base64字节数组
			byte[] byteArray=userString.getBytes();
			byte[] base64ByteArray=Base64.decode(byteArray, Base64.DEFAULT);
			//第三步:将字节数组存入ObjectInputStream
			ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(base64ByteArray);
		    ObjectInputStream objectInputStream=new ObjectInputStream(byteArrayInputStream);
		    //第四步:从ObjectInputStream中读取出对象Object
		    User user=(User) objectInputStream.readObject();
		    System.out.println("Object from SharedPreferences:"+user);
		} catch (Exception e) {
			
		}
	   
	}

	

}

User如下:

package cc.object;

import java.io.Serializable;

public class User implements Serializable {
	private String username;
	private String password;
	public User(String username, String password) {
		super();
		this.username = username;
		this.password = password;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "User [username=" + username + ", password=" + password + "]";
	}
	

}

main.xml如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="利用SharedPreferences存取对象" 
        android:layout_centerInParent="true"/>

</RelativeLayout>


相关文章
|
15天前
|
JavaScript
JS 获取对象数据类型的键值对的键与值
JS 获取对象数据类型的键值对的键与值
|
20天前
|
存储 Java
map中存储的是引用,而不是对象本身
该内容是关于Java编程中验证Map存储引用而非复制对象的示例。创建大型List导致内存增加,说明List确实占用空间。通过Person类示例,将不同对象放入Map,改变一个对象的属性后,比较原对象与Map中的键值对,发现两者相等,证明Map保存的是对象引用。
20 5
|
2月前
|
Java
|
存储 JSON 缓存
关于本地缓存localstorage与sessionStorage 数组 (array)字符串(string) 对象(object)的存储技巧和注意事项
localstorage与sessionStorage的使用方法都是一样的 唯一的区别在与 localstorage是永久储存在你的计算机上  sessionstorage只要浏览器关闭,存储就消失 &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;本地缓存&lt;/title&gt; &lt;/head&g
1510 0
|
8月前
|
缓存 Java 数据库
字典缓存工具类
在系统设计中,需要考虑到系统性能方面的需求,需要对一些数据字典进行缓存操作。。
132 1
|
9月前
对象添加自定义键值对
对象添加自定义键值对
|
9月前
|
存储 设计模式 Java
Spring 更简单的读取和存储对象、使用注解存取对象
Spring 更简单的读取和存储对象、使用注解存取对象
|
11月前
|
缓存 NoSQL Dubbo
因在缓存对象中增加字段,而导致Redis中取出缓存转化成Java对象时出现反序列化失败的问题...
因在缓存对象中增加字段,而导致Redis中取出缓存转化成Java对象时出现反序列化失败的问题...
219 0
NSKeyedArchiver保存对象到本地
NSKeyedArchiver保存对象到本地
49 0
获取一个集合中(集合中存贮的是对象)根据对象的某一个属性获取对应数据
获取一个集合中(集合中存贮的是对象)根据对象的某一个属性获取对应数据
87 0