Android数据存储之SharedPreferences

本文详细介绍了SharedPreferences这一轻型数据存储方式的基本概念、使用流程及示例代码。涵盖了数据存储、读取及监听事件的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

           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;
	
	@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;
		}
	}
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值