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