展开说说:Android之SharedPreferences

        SharedPreferences 是一种轻量级的数据持久化存储机制。以key/value键值形式存储在xml文件,用于保存一些应用程序数据。保存/data/data/PACKAGE_NAME/shared_prefs/xxx.Xml文件

SharedPreferences 只能存储string,int,float,long和boolean五个基本数据类型。如果需要存取比较复杂的数据类型,则需要对这些数据进行序列化这一点通过源码可以看到SharedPreferences是个接口它的内部接口是Editor,里面定义了上面五个数据类型的put方法,以及putString、remove、clear、commit、apply方法。

上面可以看出getxx方法不在Edit接口中,他们是在SharedPreferences

父级接口定义的,因此增加、删除、清空方法需要使用edit但get方法不用,下面距离分别验证这些方法。另外下面还有个是检查当前键是否存在可以返回所有可用的键值两个方法。

  1. 布局定义了一些按钮
  1. 定义getSharedPreferences工具类
  2. private static SharedPreferences preferences;
    public static final String SPNAME = "appSpName";
    
    public static void putString(String key,String value){
        getSP().edit().putString(key,value).apply();
        Log.e(TAG, "putString: "+ getString(key,"你太着急了"));
    }
    public static String getString(String key,String defaultValue){
        return getSP().getString(key, defaultValue);
    }
    
    
    public static void putInt(String key,int value){
        getSP().edit().putInt(key,value).apply();
    }
    public static int getInt(String key,int defaultValue){
        return getSP().getInt(key, defaultValue);
    }
    
    
    public static void putBoolean(String key,boolean value){
        getSP().edit().putBoolean(key,value).apply();
    }
    public static boolean getBoolean(String key,boolean defaultValue){
        return getSP().getBoolean(key, defaultValue);
    }
    
    
    public static void putFloat(String key,float value){
        getSP().edit().putFloat(key,value).apply();
    }
    public static float getFloat(String key,float defaultValue){
        return getSP().getFloat(key, defaultValue);
    }
    
    
    public static void putLong(String key,long value){
        getSP().edit().putLong(key,value).apply();
    }
    public static long getLong(String key,long defaultValue){
        return getSP().getLong(key, defaultValue);
    }
    
    /**
     * 根据key值删除指定元素,各类型通用因为大家的key都是String
     * @param key
     */
    public static void deleteValue(String key){
        getSP().edit().remove(key).apply();
    }
    
    /**
     * 清空了,创建这个sharedpreference所有的
     */
    public static void clearAll(){
        getSP().edit().clear().apply();
    }
    
    /**
     * 清空了,创建这个sharedpreference所有的
     */
    public static boolean containsKey(String key){
        getSP().edit().clear().apply();
        //检查当前键是否存在
        boolean isContains=getSP().contains(key);
        Log.e(TAG, "containsKey: isContains= "+isContains );
        //使用getAll可以返回所有可用的键值
        Map<String,?> keyMap=getSP().getAll();
        if (!keyMap.isEmpty()){
            Set<String> keySet = keyMap.keySet();
            for (String myKey: keySet){
                Log.e(TAG, "containsKey: myKey= "+myKey );
            }
        }
    
        return isContains;
    }
    
    public static SharedPreferences getSP(){
        if (preferences == null){
            preferences = BaseApplication.getContext().getSharedPreferences(SPNAME, Context.MODE_PRIVATE);
        }
        return preferences;
    }

    注意:

    2.1 BaseApplication.getContext().getSharedPreferences(SPNAME, Context.MODE_PRIVATE);

    getSharedPreferences方法传入的操作模式
    Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
    Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
    特别注意:还有两个MODE_WORLD_READABLE MODE_WORLD_WRITEABLE我们不需要学习了,他们 用来控制其他应用是否有权限读写该文件,Android 4.2版本中已经被弃用

    2.2 applycommit前者是异步后者是同步方法。apply方法时在Android API level 9中引入的,调用它会安全的异步写入SharedPreference Editor当下首选方法。

  3. 定义按钮的点击事件并调用这个工具类
  4. @Override
    public void onClick(View v) {
        int clickId = v.getId();
        if (clickId == R.id.asyncAct_putString){
            SpUtil.putString("name","张三");
        }else if (clickId == R.id.asyncAct_getString){
            String name = SpUtil.getString("name", "无名");
            String name1 = SpUtil.getString("name1", "无名");
            Log.e(TAG, "getString: name= "+ name +"    name1= "+name1);
        }else if (clickId == R.id.asyncAct_putBoolean){
            SpUtil.putBoolean("isBoy",true);
        }else if (clickId == R.id.asyncAct_getBoolean){
            boolean isBoy = SpUtil.getBoolean("isBoy", false);
            Log.e(TAG, "getBoolean: isBoy= "+isBoy);
        }else if (clickId == R.id.asyncAct_putInt){
            SpUtil.putInt("age",18);
        }else if (clickId == R.id.asyncAct_getInt){
            int age = SpUtil.getInt("age", -1);
            Log.e(TAG, "getInt:   age= "+age);
        }else if (clickId == R.id.asyncAct_putFloat){
            SpUtil.putFloat("height",177.7F);
        }else if (clickId == R.id.asyncAct_getFloat){
            float height = SpUtil.getFloat("height", 0.00F);
            Log.e(TAG, "getFloat: height= "+height );
        }else if (clickId == R.id.asyncAct_putLong){
            SpUtil.putLong("weight",70L);
        }else if (clickId == R.id.asyncAct_getLong){
            long weight = SpUtil.getLong("weight", 0L);
            Log.e(TAG, "getLong: weight= "+weight );
        }else if (clickId == R.id.asyncAct_clearAll){
            SpUtil.clearAll();
        } else if (clickId == R.id.asyncAct_containsKey){
            SpUtil.containsKey("weight");
        }
    }

  5. 一些小提醒
    1. 应用程序一旦卸载或者通过手机设置页面清缓存,SharedPreference也会被删除。
    2. 在实际开发者很多会涉及敏感数据,针对敏感数据我们呢需要对其加密后再进行存储,取数据也是先解密再使用。
  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值