android 之 SharedPreferences 保存对象数据

原创 2015年11月18日 09:49:32

通常我们认为Sharedpreferences能够保存简单的数据类型 int double float等等,其实它也能保存一个对象,不过需要先将对象进行Base64编码后才能保存到Sharedpreferences中,我封装了一个类

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import org.apache.commons.codec.binary.Base64;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.StreamCorruptedException;

public class SharedPreferencesUtil {
    private static Context mContext;
    private static SharedPreferencesUtil sp = new SharedPreferencesUtil();
    private static SharedPreferences saveInfo;
    private static Editor saveEditor;

    public static SharedPreferencesUtil getInstance(Context context){

        mContext =context;
        if (saveInfo == null && mContext != null) {
            saveInfo = mContext.getSharedPreferences("News",Context.MODE_PRIVATE);
            saveEditor = saveInfo.edit();
        }
        return sp;
    }
    private SharedPreferencesUtil() {
        if (mContext != null) {
            saveInfo = mContext.getSharedPreferences("News",Context.MODE_PRIVATE);
            saveEditor = saveInfo.edit();

        }
    }

    /**
     * @param key
     * @param value
     */
    public void saveSerializable(String key, Object value) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            oos.writeObject(value);
            oos.flush();
            if (oos != null)
                oos.close();
            String strData = new String(Base64.encodeBase64(baos.toByteArray()));
            saveEditor.putString(key, strData);
            saveEditor.commit();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (baos != null)
                    baos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * @param key
     * @return
     */
    public Object restoreSerializable(String key) {
        Object obj = null;
        String objectInfo = saveInfo.getString(key, null);
        if (objectInfo == null) {
            return null;
        }
        ByteArrayInputStream bais = new ByteArrayInputStream(Base64.decodeBase64(objectInfo.getBytes()));
        try {
            ObjectInputStream ois = new ObjectInputStream(bais);
            obj = ois.readObject();
            ois.close();
        } catch (StreamCorruptedException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                if (bais != null)
                    bais.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return obj;
    }

通过单例模式产生一个Utils工具,可以通过Utils对需要保存的对象进行保存,获取保存的对象等等操作

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android进阶——Sharedpreferences保存对象和图片等复杂类型的数据

Sharedpreferences保存序列化的对象和图片等复杂类型的数据
  • CrazyMo_
  • CrazyMo_
  • 2017年01月16日 18:15
  • 1877

SharedPreferences保存List和对象序列化数据

在Android下做持久化的数据存储,大部分是用到了sqlite数据库或者sharepreference。为了少写sql语句,大部分都是用ORM形式的开源数据库框架,例如greendao和cupboa...
  • jxf_access
  • jxf_access
  • 2017年03月10日 16:51
  • 2681

Android SharedPreferences保存和读取对象

SharedPreferences保存和读取对象 1.首先要序列化对象(下面是序列化实体类的例子,不方便贴出实体类所有的代码) public class LoginResult extends Ba...
  • pcaxb
  • pcaxb
  • 2015年07月29日 09:14
  • 8509

androidのSharedPreferences存储集合对象

getSharedPreferences(String str, int MODE)   方法声明: Public SharedPreferences  getSharedPreferences...
  • xiabing082
  • xiabing082
  • 2013年08月06日 15:39
  • 2061

Android将对象存储到SharedPreferences中

如果需要将一个对象存储到Android SharedPreferences中,可以用到下面的办法:以我的例子来说,我需要将一个标记账本的对象,其中元素为封面背景id(int)和账本名称(String)...
  • Chase_Java
  • Chase_Java
  • 2017年05月04日 15:33
  • 923

Android本地最简单的数据存储,没有之一(让SharedPreferences存取JavaBean对象或List<Bean>)

1.什么是SharedPreferences我们在开发软件的时候,常需要向用户提供软件参数设置功能,例如我们常用的微信,用户可以设置是否允许陌生人添加自己为好友.对于软件配置参数的保存,如果是在win...
  • shaoduo
  • shaoduo
  • 2017年04月23日 21:24
  • 2639

使用SharedPreferences保存图片与对象

这是一般SharedPreferences的使用方法 private SharedPreferences mSharedPreferences; private SharedPreferences....
  • Wiiix
  • Wiiix
  • 2016年06月06日 17:04
  • 2802

Android SharedPreferences保存/获取简单本地数据

使用SharedPreferences 可以很方便的保存一些简单的数据。可以保存的数据类型为一些基本数据类型:String\ int\ long\ float\ boolean;集合类:Set,但是里...
  • SeanHuang1661
  • SeanHuang1661
  • 2016年03月07日 11:24
  • 3422

【android】存储数组数据到SharedPreferences

如果要数组数据(如boolean[] 、int[]等)到SharedPreferences时,我们可以先将数组数据组织成json数据存储到SharedPreferences,读取时则对json数据进行...
  • u011494050
  • u011494050
  • 2014年08月26日 18:00
  • 5801

Android SharedPreferences存取清删

之前做应用时碰到这样一个问题:在“A” Activity 要与 “B” Activity的Fragment进行通信传值,但是忽然发现无法拿到B中Fragment的Handler,又不能发送广播,短暂的...
  • QPC908694753
  • QPC908694753
  • 2017年04月14日 12:28
  • 918
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 之 SharedPreferences 保存对象数据
举报原因:
原因补充:

(最多只允许输入30个字)