Android数据存储之SharedPreferences
2016-12-16 21:34
148 查看
SharedPreferences是一种轻型的数据存储方式。我们和密码、位置信息等通常用它来保存一些软件的配置信息,例如,用户名等。其本质是以XML文件形式以键值对的形式来保存一些数据的。通常保存int 、String类型的数据。也可以保存一些复杂的数据,但是这些复杂的数据最终还是要转换成int
、String 类型的形式来保存。 复杂的数据我们也没有必要使用这种轻量级的数据存储方式了。我们直接使用数据库来存储了。接下来好好地认识一下吧。和以前一样我们给出官方的API 点击打开链接
SharedPreferences的存储流程
(1)获取SharedPreferences对象
(2)获取SharedPreferences.Editor对象(因为SharedPreferencesd对象不能直接进行存储,存储实现通过Editor对象实现)
(3)通过Editor接口的putXxxx方法保存
(4)通过Editor.commit提交
下面根据上面的步骤使用代码来看一下如何做
getSharedPreferences("my_pref",MODE_PRIVATE);第二个参数怎么设置呢?有如下几种方式:
数据改变时的监听事件:
那当我们Sharedpreferences里面保存的数据改变了,我们如何去知道呢?官方还给出了一些监听事件
但是我们需要注意一些问题:我们注册的时候尽量在Activity的Resume里面去注册。在Activity的destory里面去解注册。
因为我们监听事件如果时间长了的话,系统会将监听器当做垃圾给回收掉。
实例:保存用户名与密码
先看一下布局
接下来给出逻辑代码
、String 类型的形式来保存。 复杂的数据我们也没有必要使用这种轻量级的数据存储方式了。我们直接使用数据库来存储了。接下来好好地认识一下吧。和以前一样我们给出官方的API 点击打开链接
SharedPreferences的存储流程
(1)获取SharedPreferences对象
(2)获取SharedPreferences.Editor对象(因为SharedPreferencesd对象不能直接进行存储,存储实现通过Editor对象实现)
(3)通过Editor接口的putXxxx方法保存
(4)通过Editor.commit提交
下面根据上面的步骤使用代码来看一下如何做
//获取SharedPreferences对象 //SharedPreferences pref=PreferenceManager.getDefaultSharedPreferences(MainActivity.this); SharedPreferences pref=getSharedPreferences("my_pref", MODE_PRIVATE); /** * 第一个是调用PreferenceManager类中的getDefaultSharedPreferences()方法,而这个方法是静态的, 接收一个Context参数,自动使用包名作为前缀命名 第二个是调用Activity类中的getPerferences()方法,接收的是一个操作模式参数,文件名为活动名 */ Editor editor=pref.edit(); //存入数值 editor.putBoolean("booleanData", false); editor.putFloat("floatData", (float) 11.11); editor.putInt("intData", 20); editor.putLong("longData", System.currentTimeMillis()); editor.putString("stringData", "fengdongdong"); //提交 editor.commit();接下来得到保存的数据并在后台输出。默认值最好给出。
getSharedPreferences("my_pref",MODE_PRIVATE);第二个参数怎么设置呢?有如下几种方式:
//第一个参数为键,第二个参数为默认值 System.out.println(pref.getString("stringData", "默认值")); System.out.println(pref.getLong("longData",(long) 0.0)); System.out.println(pref.getInt("intData", 0)); System.out.println(pref.getFloat("floatData", (float) 0.00)); System.out.println(pref.getBoolean("booleanData", true));最后的显示结果
数据改变时的监听事件:
那当我们Sharedpreferences里面保存的数据改变了,我们如何去知道呢?官方还给出了一些监听事件
SharedPreferences.OnSharedPreferenceChangeListener onSharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { } }; sharedPreferences.registerOnSharedPreferenceChangeListener(onSharedPreferenceChangeListener);//注册数据变化监听 sharedPreferences.unregisterOnSharedPreferenceChangeListener(onSharedPreferenceChangeListener);//解注册数据变化监听
但是我们需要注意一些问题:我们注册的时候尽量在Activity的Resume里面去注册。在Activity的destory里面去解注册。
因为我们监听事件如果时间长了的话,系统会将监听器当做垃圾给回收掉。
实例:保存用户名与密码
先看一下布局
接下来给出逻辑代码
public class MainActivity1 extends Activity { private EditText et_username; private EditText et_password; private CheckBox check; private SharedPreferences pref; private Editor editor; @Override protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_main); super.onCreate(savedInstanceState); pref=getSharedPreferences("pres1", MODE_PRIVATE); editor=pref.edit(); et_username=(EditText) findViewById(R.id.et_username); et_password=(EditText) findViewById(R.id.et_password); check=(CheckBox) findViewById(R.id.check_bt); //再次登录时首先拿到上次保存的信息 String username=pref.getString("username", ""); String password=pref.getString("password", ""); if(username==null&&password==null){ //说明我们上次登录没有保存用户名和密码 check.setChecked(false); }else{ //我们上次登录保存了信息 check.setChecked(true);//将复选框勾上 //将上次保存的信息显示在编辑框中 et_username.setText(username); et_password.setText(password); } } //按钮的监听事件 public void doClick(View view){ String username=et_username.getText().toString().trim(); String password=et_password.getText().toString().trim(); //我们假设admin 123456表示登陆成功 switch (view.getId()) { case R.id.login_bt: if("admin".equals(username)&&"123456".equals(password)){ //我们登录时首先判断,是否要记住密码 if(check.isChecked()){ //当为记住密码时,现将这次登陆的用户名和密码保存起来 editor.putString("username", username); editor.putString("password", password); editor.commit(); Toast.makeText(MainActivity1.this,"保存了用户名与密码", Toast.LENGTH_SHORT).show(); }else{ //如果不需要保存,则将上次保存的信息也移除掉 editor.remove("username"); editor.remove("password"); editor.commit(); Toast.makeText(MainActivity1.this,"移除了用户名与密码", Toast.LENGTH_SHORT).show(); } }else{//信息不匹配 Toast.makeText(MainActivity1.this,"登录失败", Toast.LENGTH_SHORT).show(); } break; } } }
相关文章推荐
- Android开发指南-框架主题-数据存储
- Android数据存储
- Android(四)数据存储之四ContentProvider
- Android 数据存储
- Android数据存储——Shared Preferences
- Android学习——数据存储
- Android数据存储
- Android(三)数据存储之三SQLite嵌入式数据库
- Android(三)数据存储之XML解析技术
- Android数据存储
- Android数据存储(总结篇)
- Android数据存储
- android数据存储ContentProvider数据获取ContentResolver
- Android(三) 数据存储之二 SharedPreferences
- Android数据存储之文件存储
- Android的数据存储
- Android存储数据的方式
- Android的数据存储
- Android(五)数据存储之五网络数据交互
- Android之SharedPreference轻量级数据存储