美文网首页
SharedPreferences

SharedPreferences

作者: Anwfly | 来源:发表于2020-10-14 10:22 被阅读0次

一、SharedPreferences和Editor简介

1. 简介

SharedPreferences是一种轻量级的数据存储方式,采用键值对的存储方式。

2. 特点

SharedPreferences只能存储少量数据,大量数据不能使用该方式存储,支持存储的数据类型有booleans, floats, ints, longs, and strings。

3. 路径

SharedPreferences存储到一个XML文件中的,路径在/data/data/<packagename>/shared_prefs/下,文件名以及存储后面详细讲述。

4. 使用场景介绍

首次启动引导页、自动登录、记住密码、推送消息开关等。

5. Editor

用来执行SharedPreferences的保存数据功能。

二、SharedPreferences使用

1. SharedPreferences对象创建

要想使用 SharedPreferences 来存储数据,首先需要获取到 SharedPreferences 对象。Android中主要提供了三种方法用于得到 SharedPreferences 对象。

  1. Context 类中的 getSharedPreferences()方法 此方法接收两个参数,
  • 第一个参数用于指定 SharedPreferences 文件的名称,如果指定的文件不存在则会创建一个SharedPreferences 文件都是存放在/data/data/<package name>/shared_prefs/目录下的。
  • 第二个参数用于指定操作模式,主要有两种模式可以选 择,MODE_PRIVATE 和 MODE_MULTI_PROCESS。

注意:
MODE_PRIVATE 仍然是默认的操作模式,和直接传入0 效果是相同的,表示只有当前的应用程序才可以对这个 SharedPreferences 文件进行读写。MODE_MULTI_PROCESS 则一般是用于会有多个进程中 对同一个 SharedPreferences 文件进行读写的情况。
类似地,MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE 这两种模式已在 Android 4.2 版本中被废弃。

  1. Activity 类中的 getPreferences()方法这个方法和 Context 中的 getSharedPreferences()方法很相似,不过它只接收一个操 作模式参数,因为使用这个方法时会自动将当前活动的类名作为 SharedPreferences 的文 件名。
  2. PreferenceManager 类中的 getDefaultSharedPreferences()方法 这是一个静态方法,它接收一个 Context 参数,并自动使用当前应用程序的包名作为前缀来命名 SharedPreferences 文件。

2. SharedPreferences保存数据

得到了 SharedPreferences 对象之后,就可以开始向 SharedPreferences 文件中存储数据了, 主要可以分为三步实现。
①调用 SharedPreferences 对象的 edit()方法来获取一个 SharedPreferences.Editor 对象。
②向 SharedPreferences.Editor 对象中添加数据,比如添加一个布尔型数据就使用putBoolean 方法,添加一个字符串则使用 putString()方法,以此类推。
③调用 commit()方法将添加的数据提交,从而完成数据存储操作。
向editor对象里写入数据,使用的是像Map一样的方法写入键值对,调用一堆 putXX()的方法。

 editor.putInt("year", year); 
 editor.putString(“name”,”张三”);
 editor.putBoolean(“isMarried”,false);

 写完以后,需要提交editor。
 editor.commit();  
这样就可以将数据写进咱们的Sharedpreferences中了

3. SharedPreferences 读取数据

上文将咱们的数据通过Editor保存以后,咱们用什么方式获取它们呢?

保存的数据直接通过以下:
①先获取SharedPreferencesshared 的对象

SharedPreferencesshared Preferences= getSharedPreferences("test", Activity.MODE_PRIVATE);

②使用 getXXX 方法依次获得value,注意第2个参数是value的默认值

int year=sharedPreferences.getInt(“year”,2016);
String name =sharedPreferences.getString("name", "");  
boolean isMarried=sharedPreferences.getBoolean(“isMarried”,false);

三、封装sp工具类

public class SharedPreferencesUtil {
    /**
     * 保存在手机里面的文件名
     */
    private static final String FILE_NAME = "share_date";


    /**
     * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法
     *
     * @param context
     * @param key
     * @param object
     */
    public static void setParam(Context context, String key, Object object) {

        String type = object.getClass().getSimpleName();
        SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();

        if ("String".equals(type)) {
            editor.putString(key, (String) object);
        } else if ("Integer".equals(type)) {
            editor.putInt(key, (Integer) object);
        } else if ("Boolean".equals(type)) {
            editor.putBoolean(key, (Boolean) object);
        } else if ("Float".equals(type)) {
            editor.putFloat(key, (Float) object);
        } else if ("Long".equals(type)) {
            editor.putLong(key, (Long) object);
        }

        editor.commit();
    }

    /**
     * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值
     *
     * @param context
     * @param key
     * @param defaultObject
     * @return
     */
    public static Object getParam(Context context, String key, Object defaultObject) {
        String type = defaultObject.getClass().getSimpleName();
        SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);

        if ("String".equals(type)) {
            return sp.getString(key, (String) defaultObject);
        } else if ("Integer".equals(type)) {
            return sp.getInt(key, (Integer) defaultObject);
        } else if ("Boolean".equals(type)) {
            return sp.getBoolean(key, (Boolean) defaultObject);
        } else if ("Float".equals(type)) {
            return sp.getFloat(key, (Float) defaultObject);
        } else if ("Long".equals(type)) {
            return sp.getLong(key, (Long) defaultObject);
        }

        return null;
    }
}

相关文章

网友评论

      本文标题:SharedPreferences

      本文链接:https://www.haomeiwen.com/subject/lvpipktx.html