SharedPreferences

1.SharedPreferences是什么

SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activity暂停时,将此activity的状态保存到SharedPereferences中;当Activity重载,系统回调方法onSaveInstanceState时,再从SharedPreferences中将值取出。

SharedPreferences提供了java常规的Long、Int、String等类型数据的保存接口。  SharedPreferences类似过去Windows系统上的ini配置文件,但是它分为多种权限,可以全局共享访问。

SharedPreferences的四种操作模式:
Context.MODE_PRIVATE
Context.MODE_APPEND
Context.MODE_WORLD_READABLE
Context.MODE_WORLD_WRITEABLE
 


2.如何存储数据

Android提供的三种主要方法得到SharedPreferences()

    1.Context里的getSharedPreferences()方法,该方法接收两个参数,第一个参数用于指定SharedPerferences的文件名(如果指定的文件不在则创建一个),第二个参数指定操作模式,主要有两个模式。MODE_PRIVATE(默认,与传入0效果一样,表示只有当前程序才能对这个SharedPerferences文件读写) 和 MODE_MULTI_PROCESS(一般用于会有多个线程中对同一个SharedPreferences文件进行读写)

    2.Activity中的getSharedPreferences(),与Context中类似,不过只接收一个操作模式(使用这个方法会将当前类名作为文件名)。

    3.PreferenceManager类中的getDefaultPreferences()方法,这是个静态方法,接收一个Context参数,并将程序的包名作为前缀来命名SharedPreferences文件。

  得到SharePreferences对象后,通过三步向SharePreferences文件存储数据:

    1.调用SharePreferences对象的edit()方法获取一个SharePreferences.Editor对象

    2.向SharePreferences.Editor对象中添加数据,是什么类型的数据就put什么类型,如putString()...

    3.commit()方法提交添加的数据。

复制代码
public class MainActivity extends Activity {
private Button saveData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
saveData = (Button) findViewById(R.id.save_data);
saveData.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = getSharedPreferences("data",
MODE_PRIVATE).edit();
editor.putString("name", "Tom");
editor.putInt("age", 28);
editor.putBoolean("married", false);
editor.commit();
}
});
}
}



3.如何读取数据

与存储数据相比,读取数据更加简单,先getSharePreferences()获取SharePreferences对象。在存储时putString()就getString()...

  这些对应的get方法,接收两个参数:键(传入数据时所用的键)和默认值(当传入的键找不到对应的值时会返回的默认值)。

复制代码
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
saveData = (Button) findViewById(R.id.save_data);
restoreData = (Button) findViewById(R.id.restore_data);
……
restoreData.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences pref = getSharedPreferences("data",
MODE_PRIVATE);
String name = pref.getString("name", "");
int age = pref.getInt("age", 0);
boolean married = pref.getBoolean("married", false);
Log.d("MainActivity", "name is " + name);
Log.d("MainActivity", "age is " + age);
Log.d("MainActivity", "married is " + married);
}
});
}
}



4.记住密码案例

SharedPreferences是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。


public class MainActivity extends AppCompatActivity {
    private Button btLogin;
    private EditText etAccount, etPassword;
    private CheckBox cbLogSelf, cbRemPsd;
    private Intent intent;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btLogin = (Button) findViewById(R.id.btLogin);
        etAccount = (EditText) findViewById(R.id.etAccount);
        etPassword = (EditText) findViewById(R.id.etPassword);
        cbLogSelf = (CheckBox) findViewById(R.id.cbLogSelf);
        cbRemPsd = (CheckBox) findViewById(R.id.cbRemPsd);

        //创建一个私有的名为config的文件,可以向里面存储数据
        final SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);

        //定义一个编辑器  可以实现数据的存储与修改
        final SharedPreferences.Editor edit = sp.edit();

        intent = new Intent(MainActivity.this, FinishActivity.class);


        if (sp.getBoolean("isRem", true)) {
            cbRemPsd.setChecked(true);
            //通过sp在config中得到账号与密码并赋值给输入框上
            etAccount.setText(sp.getString("account", ""));
            etPassword.setText(sp.getString("password", ""));
        }
        //自动跳转到下一界面
        if (sp.getBoolean("isSelf", true)) {
            cbLogSelf.setChecked(true);
            startActivity(intent);
        }


        cbRemPsd.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    Toast.makeText(MainActivity.this, "已勾选", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(MainActivity.this, "未勾选", Toast.LENGTH_SHORT).show();
                    //记住密码未勾选时,自动登录也不会勾选
                    cbLogSelf.setChecked(false);
                }
            }
        });

        cbLogSelf.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    /**
                     * 实现自动登录与记住密码的关联
                     * 当点击自动登录时,记住密码也同时勾选
                     */
                    cbRemPsd.setChecked(true);
                }
            }
        });

        btLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //进行非空判断
                String account = etAccount.getText().toString().trim();
                String password = etPassword.getText().toString().trim();
                if (TextUtils.isEmpty(account) || TextUtils.isEmpty(password)) {
                    Toast.makeText(MainActivity.this, "账号与密码都不能为空", Toast.LENGTH_SHORT).show();
                } else {

                    /**
                     * 记住密码
                     */
                    if (cbRemPsd.isChecked()) {
                        edit.putString("account", etAccount.getText().toString());
                        edit.putString("password", etPassword.getText().toString());
                        edit.putBoolean("isRem", true);
                        edit.commit();
                    } else {
                        edit.putString("account", "");
                        edit.putString("password", "");
                        edit.putBoolean("isRem", false);
                        edit.commit();
                    }

                    /**
                     * 自动登录
                     */
                    if (cbLogSelf.isChecked()) {
                        edit.putBoolean("isSelf", true);
                        edit.commit();
                    } else {
                        edit.putBoolean("isSelf", false);
                        edit.commit();
                    }
                    startActivity(intent);
                }
            }

        });
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值