`

将 Object 保存到 SharedPreferences 中

 
阅读更多

1. MainActivity.java

package powerise.demo01;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OptionalDataException;
import java.io.StreamCorruptedException;
import java.util.Date;

import org.apache.commons.codec.binary.Base64;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

	private EditText et_id = null;
	private EditText et_name = null;
	private Button btn_save = null;
	private TextView tv_result = null;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		initGUIElements();
		getObjectInfo();
		
		btn_save.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				String id = et_id.getText().toString();
				String name = et_name.getText().toString();
				saveObject(id, name);
				getObjectInfo();
			}
		});
	}

	protected void getObjectInfo() {
		try {
			SharedPreferences mSharedPreferences = getSharedPreferences("base64", Context.MODE_PRIVATE);
			String personBase64 = mSharedPreferences.getString("person", "");
			byte[] base64Bytes = Base64.decodeBase64(personBase64.getBytes());
			ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes);
			ObjectInputStream ois = new ObjectInputStream(bais);
			Person person = (Person) ois.readObject();
			tv_result.setText(person.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

	private void initGUIElements() {
		et_id = (EditText) findViewById(R.id.et_id);
		et_name = (EditText) findViewById(R.id.et_name);
		btn_save = (Button) findViewById(R.id.btn_save);
		tv_result = (TextView) findViewById(R.id.tv_result);
	}

	private void saveObject(String id, String name) {
		SharedPreferences mSharedPreferences = getSharedPreferences("base64", Context.MODE_PRIVATE);
		Person person = new Person(Integer.parseInt(id), name, new Date());
		try {
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			ObjectOutputStream oos = new ObjectOutputStream(baos);
			oos.writeObject(person);

			String personBase64 = new String(Base64.encodeBase64(baos.toByteArray()));
			SharedPreferences.Editor editor = mSharedPreferences.edit();
			editor.putString("person", personBase64);
			editor.commit();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

 

2. Person.java

package powerise.demo01;

import java.io.Serializable;
import java.util.Date;

public class Person implements Serializable {
	
	private static final long serialVersionUID = 4318838659250781721L;
	
	private int id;
	private String name;
	private Date birthday;

	public Person(int id, String name, Date birthday) {
		this.id = id;
		this.name = name;
		this.birthday = birthday;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", birthday=" + birthday + "]";
	}

}

 

 

3. main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
	<TextView  
	    android:layout_width="fill_parent" 
	    android:layout_height="wrap_content" 
	    android:text="编号:" />
	<EditText 
		android:id="@+id/et_id"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"/>
		
	<TextView  
	    android:layout_width="fill_parent" 
	    android:layout_height="wrap_content" 
	    android:text="姓名:" />
	<EditText 
		android:id="@+id/et_name"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"/>   
	    
	<Button
		android:id="@+id/btn_save"
	    android:layout_width="fill_parent" 
	    android:layout_height="wrap_content" 
	    android:text="保存" />
	    
	<TextView
	    android:layout_width="fill_parent" 
	    android:layout_height="wrap_content" 
	    android:text="结果:" />
	<TextView  
		android:id="@+id/tv_result"
	    android:layout_width="fill_parent" 
	    android:layout_height="wrap_content"/>
</LinearLayout>

 

 

小记:

        保存 Object 对象, 最终是以 String 形式保存在 SharedPreferences 中.

        首先将 Object 对象放入到 Object输出流中(ObjectOutputStream), 再用 Base64 将流转换 byte[]

 

        读取 Object 对象, 则相反

 

注意: 要在 http://commons.apache.org/codec/download_codec.cgi 中下载 Base64 jar 包并添加到 BuildPath 中.

分享到:
评论

相关推荐

    sharedpreferences 保存对象.zip

    首先,确保你的自定义类实现了Serializable接口,然后可以通过ObjectOutputStream将对象写入到一个文件,再将文件路径保存到SharedPreferences中。 ```java public class MyObject implements Serializable { // ....

    sharedpreferences 保存对象

    在Android开发中,`SharedPreferences` 是一个非常常用的数据存储机制,它主要用于保存应用中的轻量级数据,如用户的偏好设置、简单的配置信息等。`SharedPreferences` 提供了一种键值对(key-value pairs)的存储...

    SharedPreferences存储复杂的对象

    在实际开发中,我们有时需要将复杂对象保存到SharedPreferences中,这就需要一些技巧来实现。 首先,要理解SharedPreferences的工作原理。它是基于XML文件的,因此只能存储基本类型和String。当我们尝试存储非基本...

    Android-Fit利用SharedPreferences存储对象

    首先,你需要在项目中引入Gson库,然后创建一个Gson实例,将对象转化为JSON字符串,再将其存储到SharedPreferences中。当需要读取时,从SharedPreferences中取出字符串,再通过Gson解析回对象。 ```java // 序列化 ...

    SharedPreferences偏好设置案例

    SharedPreferences是Android系统提供的一种轻量级的数据存储方式,主要用于存储应用程序中的简单配置数据,如用户首选项、开关状态等。它的优点在于操作简单、快速,适用于应用在不同启动时保存和恢复用户设置的情况...

    android 类写入sharedPreferences

    在标题和描述中提到的方法是通过第三方库Apache Commons Lang来实现将对象转化为二进制,然后使用Base64编码存储到`SharedPreferences`中。 首先,你需要在项目中引入Apache Commons Lang的依赖。如果你的项目是...

    将对象保存到本地,保存到sd卡

    在Android系统中,保存对象到本地通常涉及到序列化和存储技术。对象的持久化是应用程序中常见的需求,尤其是在需要在程序运行的不同阶段或者重启后恢复数据时。本篇将详细介绍如何将对象保存到本地,包括SD卡,并...

    Android使用SharedPreferences和SQLite数据库实现数据存储

    本文将详细探讨如何使用SharedPreferences和SQLite数据库这两种常见的Android数据存储机制。 首先,我们来看SharedPreferences。SharedPreferences提供了一种轻量级的数据存储方式,适用于保存简单的键值对数据,如...

    List<Map<String, List>> data保存到SharedPreference和读取

    在上述代码中,`saveListMapsToSharedPreferences`方法将`List, List&lt;String&gt;&gt;&gt;`转换为JSON字符串并保存到SharedPreference,`readListMapsFromSharedPreferences`则读取JSON字符串并反序列化回原数据结构。...

    activity生命周期保存数据

    - 在`onSaveInstanceState(Bundle outState)`中,我们可以通过键值对的方式将数据存储到Bundle中。例如,如果你有一个EditText控件,你可以这样保存它的文本内容: ```java EditText editText = findViewById(R....

    Android软件开发11-12[整理].pdf

    这些状态会被保存为boolean类型的数据在SharedPreferences中。在XML布局文件中,可以通过`&lt;CheckBoxPreference&gt;`标签定义,并通过`android:key`属性指定键,`android:title`设置标题,`android:summary`添加描述。在...

    ExtendedSharedPreferences:ExtendedSharedPreferences 允许您在 SharedPreferences 中存储复杂的对象

    SharedPreferences 通常用于保存应用的轻量级配置数据,如用户偏好设置,但原生支持的数据类型仅限于基本类型(如字符串、整数、浮点数、布尔值等)。ExtendedSharedPreferences 通过提供自定义序列化和反序列化机制...

    自己实现的Android中将任意实体类(Entity、vo、dto、Model)对象(object)转为Json字符串的一个类

    2. **本地存储**:在没有数据库支持的情况下,将对象转换为JSON,存储到SharedPreferences或文件系统中。 3. **数据传输**:在组件间传递数据时,JSON字符串可以作为一种通用的数据格式。 4. **序列化**:将对象序列...

    Android 本地保存数据

    在“Android 本地保存数据”这个主题中,我们将主要关注Shared Preferences和SQLite数据库,因为它们是最常用且实用的数据存储方式。 1. **Shared Preferences**: - Shared Preferences是一种轻量级的数据存储...

    Kotpref:Kotpref-Kotlin的Android SharedPreferences委托库

    这使得可以将自定义对象安全地存储在SharedPreferences中。 **二、Kotpref的使用流程** 1. **添加依赖**:在`build.gradle`文件中添加Kotpref的依赖库。 2. **创建Kotpref模型**:定义一个类,继承自`...

    android实现ShowpreferencePre存储

    例如,当用户输入了用户名和密码后,你可以将这些信息保存到SharedPreferences中。 ```java findPreference("username").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override...

    SharedpreferenceSavaBean:sharedPreference存储复杂的序列化后的Object的示例 同时提供一个自己封装的SharedPreference帮助类

    `saveObject`方法接收一个键和任意类型的对象,将其序列化为JSON字符串并保存到SharedPreference。`getObject`方法根据键从SharedPreference中取出字符串,然后反序列化回原始对象。 使用这个帮助类,你可以像这样...

    Android sp源码分析与优化分享资料.rar

    在Android系统中,SharedPreferences是用于存储轻量级数据的一个重要组件,它提供了一个方便的接口来保存和读取用户的首选项或应用配置。本资料将深入剖析SharedPreferences的源码,揭示其工作原理,并探讨如何进行...

    Preference实例

    - 当用户在设置界面中改变Preference的值,这些更改会被自动同步到对应的SharedPreferences中,方便应用在下次启动时恢复用户的设置状态。 6. **在Fragment中使用Preference** - 在现代Android开发中,使用...

Global site tag (gtag.js) - Google Analytics