SharedPreferences
△概述
→SharedPreferenceas安卓下的数据存储方式之一,它的存储方式类似java的Map集合,以键值对方式存储数据。
→该类只能存储基本数据类型,不能存储对象型的数据。
→他是持久化的数据存储方案,就算应用程序被结束了,所存储的数据依然存在。
→每个“SharedPreferences”对象都直接和一个文件关联。
△获取"SharedPreference"对象
共有三类方式获取“SharedPreference”对象。
→Context类“getSharedPreference()”方法
参数说明:方法接受两个参数,第一个代表文件的名字,第二个是操作模式,如果所指定的文件名字并不存在,则会创建一个新的文件。主要有两类操作模式可选择,MODE_PRIVATE、MODE_MULTI_PROCESS。前者是默认的操作模式,表示只有当前应用可以读写这个文件,后者主要用于多进程对同个文件进行读写。
→Activity类的”getPreference()“方法
参数说明:他只接受一个参数,相比于前一个方法,这个方法不接收文件名,只能指定他的操作模式,他的文件名默认是当前Activity类名。
→PreferenceManager类的“getDefaultSharedPreferences()”方法
参数说明:这是一个静态方法,他只接受一个Context的参数,不能自定义文件的名字以及操作模式。
存储路径:所有”SharedPreference"对象都存储在同个路径下面:/data/data/<包名>/shared_prefs/,他们的区别仅仅是文件名字。
△使用“SharedPreference”对数据做读写操作
“SharedPreference”对象的使用主要就几个步骤:
1,通过上述一类方式获取“SharedPreference”对象。
2,调用"SharedPreferences"的edit()方法获取"SharedPreference.Editor"对象。
3,调用"SharedPreferences.Editor”对象里的“putXXXX()”方法写入相关数据。
4,数据写入完成之后,调用commit()方法提交。
另外,对“SharedPreferences”文件进行读取操作,只要“SharedPreferences”对象即可,如果要进行读操作,必须使用“SharedPreferences.Editor”对象。
△代码示例
说那么多,最后做个登陆界面演示
先来一张效果图先
活动布局文件代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:orientation="vertical"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:text="用户名字"
android:padding="4dp"/>
<!-- 用户名的编辑栏-->
<EditText
android:id="@+id/et_user_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登录密码"
android:textSize="16sp"
android:padding="4dp"/>
<!-- 这个是密码输入框-->
<EditText
android:id="@+id/et_pass_word"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- 记录是否保存密码-->
<CheckBox
android:id="@+id/cb_remember_pass_word"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="记住密码"/>
<!-- 登陆-->
<Button
android:id="@+id/btn_loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登陆"
android:layout_alignParentRight="true"/>
</RelativeLayout>
</LinearLayout>
活动代码
public class SharedActivity extends Activity{
private EditText userNameEt;
private EditText passWordEt;
private CheckBox rememberPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shared);
viewInit();
}
/*
对视图做初始化的
*/
private void viewInit(){
userNameEt = (EditText)findViewById(R.id.et_user_name);
passWordEt = (EditText)findViewById(R.id.et_pass_word);
rememberPassword = (CheckBox)findViewById(R.id.cb_remember_pass_word);
// 首先需要读取文件
// 看看原来是否保存有用户名以及密码
SharedPreferences sharedPreferences = getSharedPreferences("loadInfo",MODE_PRIVATE);
String userName = sharedPreferences.getString("userName", null);
String passWord = sharedPreferences.getString("passWord",null);
// 如果有就显示出来
if(userName!=null){
userNameEt.setText(userName);
passWordEt.setText(passWord);
}
// 点击事件响应函数
findViewById(R.id.btn_loading).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (rememberPassword.isChecked()) {
// 如果用户选择保存数据
// 将用户名以及密码保存到文件里
SharedPreferences sharedPreferences = getSharedPreferences("loadInfo", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("userName", userNameEt.getText().toString());
editor.putString("passWord", passWordEt.getText().toString());
editor.commit();
}
Toast.makeText(SharedActivity.this, "登陆成功", Toast.LENGTH_SHORT).show();
}
});
}
}