Android 数据存储之 SharedPreferences 及如何安全存储

772 阅读1分钟

前言:

    最近一直在学习ios的数据存储,当学习到NSUserDefaults的时候让我回想起了SharedPreferences,今天闲来无事,想着总结一下SharedPreferences的使用。

什么是SharedPreferences存储?

      SharedPreferences是基础key-value(键值对)来存储一些轻量数据的存储方式,特别适用于保存软件配置参数。使用SharedPreferences 保存数据,其背后是用xml文件存放数据,文件存放在/data/data//shared_prefs。

具体是怎么使用的?

1.)写入数据

       SharedPreferences sharedPreferences= getSharedPreferences("test",
                Activity.MODE_PRIVATE);
        //实例化SharedPreferences.Editor对象
        SharedPreferences.Editor editor = sharedPreferences.edit();
        //用putString的方法保存数据
        editor.putBoolean(USER_ISLOGIN,true);
        editor.putString(USER_ID, "123456");
        editor.putString(USER_PWD, "pwd123");
        //提交当前数据
        editor.apply();

2.)读取数据

SharedPreferences sharedPreferences= getSharedPreferences("test",
                Activity.MODE_PRIVATE);
        String userId=sharedPreferences.getString(USER_ID,"");
        String userPwd=sharedPreferences.getString(USER_PWD,"");
        boolean isLogin=sharedPreferences.getBoolean(USER_ISLOGIN,false);

        Log.e("","userId---->"+userId);
        Log.e("","userPwd---->"+userPwd);
        Log.e("","isLogin---->"+isLogin);

3.)监听数据变化

        SharedPreferences.OnSharedPreferenceChangeListener onSharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
            @Override
            public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

            }
        };
        sharedPreferences.registerOnSharedPreferenceChangeListener(onSharedPreferenceChangeListener);//注册数据变化监听
        sharedPreferences.unregisterOnSharedPreferenceChangeListener(onSharedPreferenceChangeListener);//解注册数据变化监听

4.)权限控制

SharedPreferences sharedPreferences= getSharedPreferences("test",
                Activity.MODE_PRIVATE);

第一个参数是生成xxx.xml文件的文件名字,第二个参数是文件的访问权限以及文件数据写入方式。简单说明一下几种方式:

Activity.MODE_PRIVATE,//默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
Activity.MODE_WORLD_READABLE,//表示当前文件可以被其他应用读取,  
Activity.MODE_WORLD_WRITEABLE,//表示当前文件可以被其他应用写入;