Android的数据存储方式之一——SharedPreferences

来源:互联网 发布:最终幻想模型制作软件 编辑:程序博客网 时间:2024/05/17 18:28

Android存储方式有使用SharedPreferences存储数据;文件存储数据;SQLite数据库存储数据;使用ContentProvider存储数据;网络存储数据。

首先说明SharedPreferences存储方式,它是 Android提供的用来存储一些简单配置信息的一种机制,例如:登录用户的用户名与密码。其采用了Map数据结构来存储数据,以键值的方式存储,可以简单的读取与写入。SharedPreferences存储文件的目录是/data/data/Package Name/Shared_Pref,安卓手机root后可以查看。

1、得到SharedPreferences对象

2、调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor对象。

3、向SharedPreferences.Editor对象中添加数据。

4、调用commit方法将添加的数据提交。

public SharedPreferences getSharedPreferences(String name, int mode) {        return mBase.getSharedPreferences(name, mode);    }

name为本组件的配置文件名( 自己定义,也就是一个文件名)
mode为操作模式,默认的模式为0或MODE_PRIVATE,还可以使用MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE

mode指定为MODE_PRIVATE,则该配置文件只能被自己的应用程序访问。
mode指定为MODE_WORLD_READABLE,则该配置文件除了自己访问外还可以被其它应该程序读取。
mode指定为MODE_WORLD_WRITEABLE,则该配置文件除了自己访问外还可以被其它应该程序读取和写入

现在比较通用的是将SharePreferences的使用封装成一个工具类SPUtil,代码如下:

package com.ada.packageapplication;import android.content.Context;import android.content.SharedPreferences; import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Map;/** * Created by Ada on 2017/6/20. */public class SPUtil {    private static String FILE_NAME="Ada_SharePreferences";    private SPUtil() {        throw new Error("Do not need instantiate");    }    /**     *保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法     * @param context     * @param key     * @param value     */    public static void saveData(Context context, String key, Object value) {        SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);        SharedPreferences.Editor edit = sp.edit();        if(value instanceof Boolean) {            edit.putBoolean(key, ((Boolean)value).booleanValue());        } else if(value instanceof String) {            edit.putString(key, (String)value);        } else if(value instanceof Integer) {            edit.putInt(key, ((Integer)value).intValue());        } else if(value instanceof Float) {            edit.putFloat(key, ((Float)value).floatValue());        } else if(value instanceof Long) {            edit.putLong(key, ((Long)value).longValue());        }        SP_Util.SharedPreferencesCompat.apply(edit);    }    /**     * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值     *     * @param context     * @param key     * @param defaultObject     * @return     */    public static Object getData(Context context, String key, Object defaultObject)    {        SharedPreferences sp = context.getSharedPreferences(FILE_NAME,                Context.MODE_PRIVATE);        if (defaultObject instanceof String)        {            return sp.getString(key, (String) defaultObject);        } else if (defaultObject instanceof Integer)        {            return sp.getInt(key, (Integer) defaultObject);        } else if (defaultObject instanceof Boolean)        {            return sp.getBoolean(key, (Boolean) defaultObject);        } else if (defaultObject instanceof Float)        {            return sp.getFloat(key, (Float) defaultObject);        } else if (defaultObject instanceof Long)        {            return sp.getLong(key, (Long) defaultObject);        }        return null;    }    /**     * 移除某个key值已经对应的值     * @param context     * @param key     */    public static void removeData(Context context, String key) {        SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);        SharedPreferences.Editor edit = sp.edit();        edit.remove(key);        SP_Util.SharedPreferencesCompat.apply(edit);    }    /**     * 清除所有数据     * @param context     */    public static void clearData(Context context) {        SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);        SharedPreferences.Editor edit = sp.edit();        edit.clear();        SP_Util.SharedPreferencesCompat.apply(edit);    }    /**     * 查询某个key是否已经存在     * @param context     * @param key     * @return     */    public static boolean containsData(Context context, String key) {        SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);        return sp.contains(key);    }    /**     * 返回所有的键值对     *     * @param context     * @return     */    public static Map<String, ?> getAll(Context context) {        SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);        return sp.getAll();    }    /**     * 创建一个解决SharedPreferencesCompat.apply方法的一个兼容类     *     * @author zhy     *     */    private static class SharedPreferencesCompat {        private static final Method mApplyMethod = findApplyMethod();        private SharedPreferencesCompat() {        }        private static Method findApplyMethod() {            try {                Class e = SharedPreferences.Editor.class;                return e.getMethod("apply", new Class[0]);            } catch (Exception var1) {                var1.printStackTrace();                return null;            }        }        public static void apply(SharedPreferences.Editor editor) {            try {                if(mApplyMethod != null) {                    mApplyMethod.invoke(editor, new Object[0]);                    return;                }            } catch (IllegalAccessException var2) {                var2.printStackTrace();            } catch (InvocationTargetException var3) {                var3.printStackTrace();            }            editor.commit();        }    }}

使用时直接调用SPUtil进行数据的存储和读取

SPUtil.saveData(this,"isRemember",cbxRemember.isChecked());SPUtil.saveData(this,"userName",userName);SPUtil.saveData(this,"password",password);
boolean isRemember= (boolean) SPUtil.getData(this,"isRemember",false);String userName= (String) SPUtil.getData(this,"userName","");String password= (String) SPUtil.getData(this,"password","");

使用场景:记住密码,代码https://github.com/adadong/SharedPreferencesDemo.git

其他参考链接http://blog.csdn.net/crazy__chen/article/details/47026845



阅读全文
0 0
原创粉丝点击