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

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>
时间: 2024-11-05 12:37:04

SharedPreferences详解(二)——存取对象的相关文章

SharedPreferences详解(三)——存取图片

MainActivity如下: package cc.sp; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import android.os.Bundle; import android.util.Base64; import android.view.View; import android.view.View.OnClickListener; import android.widget.

使用Java构造和解析Json数据的两种方法(详解二)_java

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包. 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Json数据的方法

QtDBus编程详解(二)

                                                           QtDBus编程详解(二)   我在上一篇博客QtDBus编程详解(一)中主要讲述了与QtDBus以及DBus相关的基本概念,这一章节,我将重点讲述关于QtDBus通信.   QtDBus通信,就必须有服务端和客户端(关键是弄清楚哪一端是server,哪一端是client). 我们先来看看,QtDBus通信,server和client需要做些什么工作.   server: 1.申

Android Loader 异步加载详解二:探寻Loader内部机制

Android Loader 异步加载详解二:探寻Loader内部机制 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70259914 本文出自[赵彦军的博客] Android Loader 异步加载详解一:基础概念 Android Loader 异步加载详解二:探寻Loader内部机制 在上一篇文章中,讲解了 Loader 的基本概念.这一篇将会用实战的方式来探寻 Android Loader的内部机制.我们准备做一个 读取手

Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

  [Android布局学习系列]   1.Android 布局学习之--Layout(布局)详解一   2.Android 布局学习之--Layout(布局)详解二(常见布局和布局参数)   3.Android 布局学习之--LinearLayout的layout_weight属性   4.Android 布局学习之--LinearLayout属性baselineAligned的作用及baseline      Layout Parameters(布局参数):            在XML文

Masonry自动布局详解二:动画更新约束

Masonry自动布局详解二:动画更新约束 说到iOS自动布局,有很多的解决办法.有的人使用xib/storyboard自动布局,也有人使用frame来适配.对于前者,笔者并不喜欢,也不支持.对于后者,更是麻烦,到处计算高度.宽度等,千万大量代码的冗余,对维护和开发的效率都很低. 笔者在这里介绍纯代码自动布局的第三方库:Masonry.这个库使用率相当高,在全世界都有大量的开发者在使用,其star数量也是相当高的. 支持原创,请阅读原文 效果图 本节详解Masonry的以动画的形式更新约束的基本

IReport与JasperReport开发详解二

详解  IReport与JasperReport开发详解二        3.2.1  设计报表                现在请点击菜单"DataSource"然后选取中"Report query"项,也可以点击图标 ,接着IReport会弹出一个对话框(如图):现在我们在"Report SQL Query"中输入SQL语句"select * from titles",然后去掉"Automatically Re

Bootstrap框架的学习教程详解(二)_javascript技巧

Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. 一.下载Bootstrap Bootstrap (当前版本 v3.3.0)提供以下几种方式帮你快速上手,每一种方式针对具有不同技能等级的开发者和不同的使用场景. 下载地址:http://v3.bootcss.com/getting-started/ PS:其实我们不用下载bootstrap也可以使用它: Bootst

详解Java中对象序列化与反序列化_java

        序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等.在网络传输过程中,可以是字节或是XML等格式.而字节的或XML编码格式可以还原完全相等的对象.这个相反的过程又称为反序列化.Java对象的序列化与反序列化 在Java中,我们可以通过多种方式来创建对象,并且只要对象没有被回收我们都可以复用该对象.但是,我们创建出来的这些Java对象都是存在于JVM的堆内存中的.只有JVM处于运行状态