Android保存多个对象
来源:互联网 发布:经传软件 编辑:程序博客网 时间:2024/05/11 19:01
在做Android开发的时候,有时候可能需要保存不同类中多个对象里封装好的数据,比如一个项目里面,既有书的类,书这个可以有很多不同的对象,还有学生的类,学生的类也可以创建出不同的对象,那么当有很多Activity都要用到这些数据的时候,最好可以把这些类的对象都保存起来。
下面的代码就是如何保存一个类的对象
1.首先创建一个叫SaveObject的类。主要用它来序列化对象和方序列话对象。
- 这个类也可以用来保存对象,我已经在写好了saveObject()和getObject(),但用起来很不方便,因为只能保存一个对象的数据。我希望的是像SharedPreferences这个类一样,通过键值对来进行对数据的保存和访问,这样就可以保存多个对象数据,只要你的key不一样就可以了。那么接下来再对数据进行进一步的封装。
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.StreamCorruptedException;import android.content.Context;import android.util.Base64;public class SaveObject { private Context context; private final String name = "OBJECT_DATA"; public SaveObject(Context context){ this.context = context; } /** * 保存单个对象 * @param object */ public void saveObject(Object object){ FileOutputStream stream; ObjectOutputStream oos; try { stream = context.openFileOutput(name, Context.MODE_PRIVATE); oos = new ObjectOutputStream(stream); oos.writeObject(object); oos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 取得单个对象 * @return */ public Object getObject(){ FileInputStream stream; Object obj = null; try { stream = context.openFileInput(name); ObjectInputStream ois = new ObjectInputStream(stream); obj = ois.readObject(); ois.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (StreamCorruptedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return obj; } /** * 序列化对象 */ public String serialize(Object object) throws IOException { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(object); String serializeString = new String(Base64.encode( byteArrayOutputStream.toByteArray(), Base64.DEFAULT)); objectOutputStream.close(); byteArrayOutputStream.close(); return serializeString; } /** * 反序列化对象 */ public Object UnSerialize(String str) throws IOException,ClassNotFoundException { byte[] mobileBytes = Base64.decode(str.getBytes(), Base64.DEFAULT); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(mobileBytes); ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream); Object object = objectInputStream.readObject(); objectInputStream.close(); byteArrayInputStream.close(); return object; }}
2.首先创建一个叫SharedPreferencesDatat的类,保存多个数据对象。
- 因为有了前面的SaveObject类中的序列化对象和反序列化对象,我们就可以用SharedPreferences 来保存对象数据了。在这个类里面我也写了一些基本数据的保存方法。
import java.io.IOException;import android.content.Context;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;/** * 保存轻量级数据的类 * @author Lenovo * */public class SharedPreferencesData { private String saveName = "MY_DATA"; private Editor editor; private SharedPreferences sharedPreferences; private SaveObject saveObject; public SharedPreferencesData(Context context){ editor = context.getSharedPreferences(saveName, Context.MODE_PRIVATE).edit(); sharedPreferences = context.getSharedPreferences(saveName, Context.MODE_PRIVATE); saveObject = new SaveObject(context); } public Editor putString(String key, String value) { editor.putString(key, value); return editor; } public Editor putInt(String key, int value) { editor.putInt(key, value); return editor; } public Editor putBoolean(String key, boolean value) { editor.putBoolean(key, value); return editor; } public Editor remove(String key) { editor.remove(key); return editor; } public Editor clear() { editor.clear(); return editor; } public Editor commit() { editor.commit(); return editor; } public String getString(String key, String defValue) { return sharedPreferences.getString(key, defValue); } public int getInt(String key, int defValue) { return sharedPreferences.getInt(key, defValue); } public boolean getBoolean(String key, boolean defValue) { return sharedPreferences.getBoolean(key, defValue); } /** * 自定义保存对象 * @param key * @param object */ public void putObject(String key,Object object){ try { this.putString(key, saveObject.serialize(object)); } catch (IOException e) { e.printStackTrace(); } } /** * 自定义取得对象 * @param key * @param defValeObject * @return */ public Object getObject(String key,Object defValeObject){ Object object = null; try { object = saveObject.UnSerialize(this.getString(key,(String)defValeObject)); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return object; }}
注意:你要保存的对象一定要是继承了Serializable接口,告诉系统这是一个被序列化的类,不然会报错(例如:public class Human implements Serializable)
到这里,就可以用SharedPreferencesData类中的putObject()和getObject()方法来保存多个对象和获取多个对象的数据了。
0 0
- Android保存多个对象
- 多个对象的保存与读取
- android sharedpreference 保存对象
- Json实现页面多个对象的保存
- Json实现页面多个对象的保存
- Json实现页面多个对象的保存 java /.net
- android 对象保存到SP
- Android使用SharedPreferences保存对象
- Android使用SharedPreferences保存对象
- android 使用sharedpreferences 保存对象
- grails表单提交数据保存时,封装多个对象,以单一对象形式提交
- android preference保存 多个密码和用户名
- Android SQLite保存多个选择题的选择信息
- android之间传递多个对象
- Android 多个Activity间对象共享
- android View 保存成Bitmap对象
- 93 Android SharedPreferences 保存图片/对象
- Android SharedPreferences保存和读取对象
- iOS开发-正则表达式的使用方法
- sass与compass简单教程
- CentOS下安装数据库
- 重学C++Primer笔记10---容器常用用法总结与归纳
- 新应用知识整理-图片的下载、内存软引用与本地缓存的实现
- Android保存多个对象
- ActiveAdmin 数据管理
- 是否可抵扣,视同销售?
- jQuery MiniUI开发系列之:使用API文档
- 第七周项目(4):队列数组
- hadoop、hbase、storm官方论坛交流群
- 判断新特性(判断版本号)
- 项目五——排队看病时模拟
- centos7系统下完美安装mysql5.6