我博客的相关说明
持久化技术
《第一行代码》第六章学习笔记
主要介绍三种方式
文章目录
2.SharedPreference储存
不同于文件的储存方式,SharedPreference是使用键值对的方式来存储数据的。
也就是说,当保存一条数据的时候,需要给这个数据一个对应的键,这样在读取数据的时候才可以通过这个键值把相应的值取出来。并且SharedPreference还支持不同的数据类型。当你存入特定类型的数据时,对应取出的数据也是你存入时候的数据类。
2.1将数据存储到SharedPreference中
要使用SharedPreference来存储数据,首先需要获取SharedPreference对象,Android主要提供三种方法:
- Context类中的
getSharedPreference()
方法
这个方法接收两个参数:
·········1.用于指定文件名称。如果不存在就创造一个,SharedPreference文件都是存放在/data/data/<package name>/shared_prefs/
目录下的。
··········2.用于指定操作模式,目前只有MODE_PPRIVATE
一种模式可选,与直接传入0相同
- Activity类中的
getPreference()
方法
这个方法和Context类中的方法类似,但是只接收一个参数:
··········1.操作模式。
··········这个方法会自动将当前活动的类名
作为SharedPreference的文件名
- PreferenceManager类中的
getDefaultSharedPreference()
方法
这是一个静态方法,它只接收一个参数:
··········1.Context
··········它会自动使用当前应用程序的包名
作为前缀来命名SharedPreference文件
获得SharedPreference对象之后,我们就可以向文件中存储数据了!
主要可以分为三步实现:
- 1.调用SharedPreference对象的
edit()
方法来获取一个SharedPreference.Editor
对象 - 2.向
SharedPreference.Editor
对象中添加数据。 - 3.调用
apply()
方法将添加的数据提交。
示例:
①.新建Activity,并配置相应的布局文件。
这里用EditText来获取数据,用Button来执行保存代码
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入姓名"/>
<EditText
android:id="@+id/age"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:hint="请输入年龄"/>
<CheckBox
android:id="@+id/select"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Test是否选中"/>
<Button
android:id="@+id/btn_pre"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="保存"/>
②.在主程序中修改代码
public class SharedPrefs_Test extends AppCompatActivity {
private EditText tv_name,tv_age; //声明控件
private CheckBox isSelect;
private Button btn_pre;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.shared_prefs__test);
tv_age = findViewById(R.id.age); //找到控件
tv_name = findViewById(R.id.name);
isSelect = findViewById(R.id.select);
btn_pre = findViewById(R.id.btn_pre);
btn_pre.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获得SharedPreference.Editor对象
SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();
editor.putString("name",tv_name.getText().toString());
editor.putInt("age", Integer.parseInt(tv_age.getText().toString()));
editor.putBoolean("isSelected",isSelect.isChecked());
editor.apply(); //调用apply()方法以保存数据
}
});
}
}
ok,在EditText中编辑数据之后点击保存按键,相应的数据和标签就保存到名为"data"
的文件当中啦!
怎么查看呢? 可以借助Android Device Monitor工具来查看
点击AndroidStudio导航栏中的Tools→Android,找到Android Device Monitor。进入工具后,找到File Explorer标签页,在这里找到/data/data/com.example.shaerdpreferencetest/shared_prefs/目录,就可以看到生成了一个data文件。(AS3.0之后的版本参考这篇文章进入Android Device Monitor)
2.2从SharedPreference读取数据
SharedPreference对象提供了一系列的get
方法,用于读取数据。而每一个get
方法其实都对应之前存储数据的put
方法。
这些
get
方法接受两个参数:
··········1.键值。即存入数据时的键值。
··········2.默认值。即当传入的键找不到对应值的时候会以什么样的默认值返回。
示例:
①.在之前的布局文件中加入读取按钮
<Button
android:id="@+id/btn_print"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="打印数据"/>
②.设置点击事件,并且以Toast的形式弹出数据
public class SharedPrefs_Test extends AppCompatActivity {
private ···;
private btn_print;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
···
btn_print = findViewById(R.id.btn_print);
btn_pre.setOnClickListener(new View.OnClickListener() {···});
btn_print.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences preferences = getSharedPreferences("data",MODE_PRIVATE);
String name = preferences.getString("name","get null");
int age = preferences.getInt("age",0);
boolean isSelect = preferences.getBoolean("isSelected",false);
Toast.makeText(getApplicationContext(),name+"\n"+age+"\n"+isSelect,Toast.LENGTH_SHORT).show();
}
});
}
}
让我们来看一下效果,首先在EdiText中录入相应的数据:
点击保存按钮,数据便被保存到了SharedPreference中。退出应用,再打开后点击打印数据:
可以看到文件已经保存成功啦!