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 中.
分享到:
相关推荐
首先,确保你的自定义类实现了Serializable接口,然后可以通过ObjectOutputStream将对象写入到一个文件,再将文件路径保存到SharedPreferences中。 ```java public class MyObject implements Serializable { // ....
在Android开发中,`SharedPreferences` 是一个非常常用的数据存储机制,它主要用于保存应用中的轻量级数据,如用户的偏好设置、简单的配置信息等。`SharedPreferences` 提供了一种键值对(key-value pairs)的存储...
在实际开发中,我们有时需要将复杂对象保存到SharedPreferences中,这就需要一些技巧来实现。 首先,要理解SharedPreferences的工作原理。它是基于XML文件的,因此只能存储基本类型和String。当我们尝试存储非基本...
首先,你需要在项目中引入Gson库,然后创建一个Gson实例,将对象转化为JSON字符串,再将其存储到SharedPreferences中。当需要读取时,从SharedPreferences中取出字符串,再通过Gson解析回对象。 ```java // 序列化 ...
SharedPreferences是Android系统提供的一种轻量级的数据存储方式,主要用于存储应用程序中的简单配置数据,如用户首选项、开关状态等。它的优点在于操作简单、快速,适用于应用在不同启动时保存和恢复用户设置的情况...
在标题和描述中提到的方法是通过第三方库Apache Commons Lang来实现将对象转化为二进制,然后使用Base64编码存储到`SharedPreferences`中。 首先,你需要在项目中引入Apache Commons Lang的依赖。如果你的项目是...
在Android系统中,保存对象到本地通常涉及到序列化和存储技术。对象的持久化是应用程序中常见的需求,尤其是在需要在程序运行的不同阶段或者重启后恢复数据时。本篇将详细介绍如何将对象保存到本地,包括SD卡,并...
本文将详细探讨如何使用SharedPreferences和SQLite数据库这两种常见的Android数据存储机制。 首先,我们来看SharedPreferences。SharedPreferences提供了一种轻量级的数据存储方式,适用于保存简单的键值对数据,如...
在上述代码中,`saveListMapsToSharedPreferences`方法将`List, List<String>>>`转换为JSON字符串并保存到SharedPreference,`readListMapsFromSharedPreferences`则读取JSON字符串并反序列化回原数据结构。...
- 在`onSaveInstanceState(Bundle outState)`中,我们可以通过键值对的方式将数据存储到Bundle中。例如,如果你有一个EditText控件,你可以这样保存它的文本内容: ```java EditText editText = findViewById(R....
这些状态会被保存为boolean类型的数据在SharedPreferences中。在XML布局文件中,可以通过`<CheckBoxPreference>`标签定义,并通过`android:key`属性指定键,`android:title`设置标题,`android:summary`添加描述。在...
SharedPreferences 通常用于保存应用的轻量级配置数据,如用户偏好设置,但原生支持的数据类型仅限于基本类型(如字符串、整数、浮点数、布尔值等)。ExtendedSharedPreferences 通过提供自定义序列化和反序列化机制...
2. **本地存储**:在没有数据库支持的情况下,将对象转换为JSON,存储到SharedPreferences或文件系统中。 3. **数据传输**:在组件间传递数据时,JSON字符串可以作为一种通用的数据格式。 4. **序列化**:将对象序列...
在“Android 本地保存数据”这个主题中,我们将主要关注Shared Preferences和SQLite数据库,因为它们是最常用且实用的数据存储方式。 1. **Shared Preferences**: - Shared Preferences是一种轻量级的数据存储...
这使得可以将自定义对象安全地存储在SharedPreferences中。 **二、Kotpref的使用流程** 1. **添加依赖**:在`build.gradle`文件中添加Kotpref的依赖库。 2. **创建Kotpref模型**:定义一个类,继承自`...
例如,当用户输入了用户名和密码后,你可以将这些信息保存到SharedPreferences中。 ```java findPreference("username").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override...
`saveObject`方法接收一个键和任意类型的对象,将其序列化为JSON字符串并保存到SharedPreference。`getObject`方法根据键从SharedPreference中取出字符串,然后反序列化回原始对象。 使用这个帮助类,你可以像这样...
在Android系统中,SharedPreferences是用于存储轻量级数据的一个重要组件,它提供了一个方便的接口来保存和读取用户的首选项或应用配置。本资料将深入剖析SharedPreferences的源码,揭示其工作原理,并探讨如何进行...
- 当用户在设置界面中改变Preference的值,这些更改会被自动同步到对应的SharedPreferences中,方便应用在下次启动时恢复用户的设置状态。 6. **在Fragment中使用Preference** - 在现代Android开发中,使用...