基础Android技术知识Android知识

Android数据存储之SharedPreferences(下)

2017-06-26  本文已影响149人  pokerfaceCmy

之前写过一篇 SharedPreferences 简单的介绍:
Android数据存储之SharedPreferences(上)

忙过了这段时间后 准备一点点的把从项目中学习到的新知识慢慢的做一个总结。就先从SharedPreferences开始好了。

很多Android APP登陆的时候,会有一个 “记住密码”的选择框,点击勾选之后,下次登陆时就不用再重复输出账号密码,直接点击登陆按钮即可。这个功能就是用Android的SharedPreferences来实现的。我们来试着做做看。

首先写一个SharedPreferences工具类,用来封装一些我们经常会用到的方法,具体代码如下:

public class SharedPreferencesUtils {
    private String SP_INFO = "spInfo";
    private Context context;

    public SharedPreferencesUtils(Context context) {
        this.context = context;
    }

    /**
     * 存放字符串类型的登陆信息,以键值对的形式保存.
     *
     * @param key
     * @param value
     */
    public void setInfo(String key, String value) {
        SharedPreferences sp = context.getSharedPreferences(SP_INFO,
                Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        editor.remove(key);
        editor.putString(key, value);
        editor.commit();
    }

    /**
     * 获取String类型的数据
     *
     * @param key 键值对的键
     * @return String类型的字符串
     */
    public String getStringInfo(String key) {
        SharedPreferences sp = context.getSharedPreferences(SP_INFO,
                Context.MODE_PRIVATE);
        return sp.getString(key, "");
    }

    /**
     * 存放布尔型参数.
     * @param key
     * @param value
     */
    public void setInfo(String key, Boolean value) {
        SharedPreferences sp = context.getSharedPreferences(SP_INFO,
                Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        editor.remove(key);
        editor.putBoolean(key, value);
        editor.commit();
    }

    /**
     * 获得用户信息中某项布尔型参数的值.
     * @param key
     * @return
     */
    public boolean getBooleanInfo(String key) {
        SharedPreferences sp = context.getSharedPreferences(SP_INFO,
                Context.MODE_PRIVATE);
        return sp.getBoolean(key, false);
    }

    /**
     * 获取SharedPreferences数据里全部的key-value对.
     * @return Map类型的数据
     */
    public Map getAllInfo() {
        SharedPreferences sp = context.getSharedPreferences(SP_INFO,
                Context.MODE_PRIVATE);
        return sp.getAll();
    }

    /**
     * 清空SharedPreferences.
     */
    public void clear() {
        SharedPreferences sp = context.getSharedPreferences(SP_INFO,
                Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        editor.clear();
        editor.commit();
    }
}

然后在Activity中调用工具类中的方法,具体代码如下:

loginUtil = new LoginUtil(this);
        //获取SharedPreferences中的账号和密码
        if (loginUtil.getBooleanInfo(Constants.ISSAVEPASS)){
            remPasswordView.setChecked(true);
            loginNameView.setText(loginUtil.getStringInfo(Constants.USER_NAME));
            passwordView.setText(loginUtil.getStringInfo(Constants.PASSWORD));
        }
  //设置记住密码,调用登陆工具类,将数据存入SharedPreferences
if (remPasswordView.isChecked()){
    loginUtil.setUserInfo(Constants.USER_NAME,loginNameViewValue);
    loginUtil.setUserInfo(Constants.PASSWORD,passwordViewValue);
    loginUtil.setUserInfo(Constants.ISSAVEPASS,true);
        }else if (!remPasswordView.isChecked()){
            loginUtil.setUserInfo(Constants.ISSAVEPASS,false);
        }

这样,点击记住密码的复选框后,登陆一次,下次再登陆就再也不需要重新输入账号密码这么麻烦了。

如果要清空数据记得调用SharedPreferencesUtils 的clean()方法就好了。

示例图如下:

device-2017-06-26-164347.png device-2017-06-26-164412.png

后记:
SharedPreferences只能用来存储一些简单的信息,例如登陆的账号密码,用户的配置信息等等。但是如果要存放负责的生产数据,使用SharedPreferences就很不方便了。这个时候我们可以尝试使用Sqlite来解决问题。让我喘一会儿气,接着写关于Android数据库存储的相关知识

上一篇 下一篇

猜你喜欢

热点阅读