1.SharedPreferences是什么
SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activity暂停时,将此activity的状态保存到SharedPereferences中;当Activity重载,系统回调方法onSaveInstanceState时,再从SharedPreferences中将值取出。
SharedPreferences提供了java常规的Long、Int、String等类型数据的保存接口。 SharedPreferences类似过去Windows系统上的ini配置文件,但是它分为多种权限,可以全局共享访问。
SharedPreferences的四种操作模式: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