Android数据存储之SharedPreferences
来源:互联网 发布:mac版qq无法接收文件 编辑:程序博客网 时间:2024/06/06 23:16
SharedPreferences是一种轻型的数据存储方式。我们和密码、位置信息等通常用它来保存一些软件的配置信息,例如,用户名等。其本质是以XML文件形式以键值对的形式来保存一些数据的。通常保存int 、String类型的数据。也可以保存一些复杂的数据,但是这些复杂的数据最终还是要转换成int 、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;@Overrideprotected 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数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- Android--数据存储之SharedPreferences
- android数据存储之SharedPreferences
- Android之数据存储SharedPreferences
- Android数据存储之SharedPreferences
- android数据存储之--------- SharedPreferences
- Android数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- android数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- Android----数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- Android之SharedPreferences数据存储
- Android数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- QT5中QSerialPort串口通讯的时候,readyRead()信号不产生的解决方案
- 最常见的算法,用PHP如何实现 (2016-06-12 19:53:17)
- 什么样的DevOps技能是团队需要的?
- java.lang.IllegalStateException: Fragment already added:
- 测试将RAC GRID_HOME下所有文件属组修改后的修复方式permission.pl
- Android数据存储之SharedPreferences
- GDKOI2016
- angualr.js指令的详解
- TensorFlow学习(八):tensorborad可视化
- 刷杭电oj有感(1)。
- 大步小步算法(BSGS)及扩展 & bzoj 2480
- 【31.72%】【codeforces 604B】More Cowbell
- codeforces 742A-Arpa’s hard exam and Mehrdad’s naive cheat 快速幂
- 对Verilog 初学者比较有用的整理