今天我学习了SharedPreferences数据存储这一块内容,顺便过来分享一下吧。
首先呢,给一段代码,可以实现输入一段数据后,点击按钮会存储到数据库中,退出后再进来,会读取数据的功能。如果读者对这方面的内容有了一些了解的话,可以先跳过,初学者的话,可以自己先照着打一遍试试。找找感觉。
亲测:
1.代码可运行。(自己添加包即可)
2.自己先打一遍了解一下运行情况再学效果更佳。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.zhang.cunchu.Main3Activity">
<EditText
android:id="@+id/et"
android:layout_width="match_parent"
android:layout_height="100dp" />
<Button
android:id="@+id/b"
android:layout_width="match_parent"
android:layout_height="100dp" />
</LinearLayout>
上面的XML文件没什么好说的,布局而已,下面的代码我会加一些注释,主要是帮助理解吧!
既然本文主要是讲关于SharedPreferences数据存储的,那么我就只注释SharedPreferences数据存储部分的吧。
public class Main3Activity extends AppCompatActivity {
private EditText e;
private Button b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
b=findViewById(R.id.b);
e=findViewById(R.id.et);
SharedPreferences shared=getSharedPreferences("sd",MODE_PRIVATE);
//括号里的sd文件夹是我自己定义的,就是在代码里将他命名为sd.
if(shared!=null){//shared代表的是sd文件夹是否为空
e.setText(shared.getString("as",""));
}
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences sharedPreferences=getSharedPreferences("sd",MODE_PRIVATE);
//创一个SharedPreferences对象,注意“=”后面的是getSharedPreferences而不是new.
SharedPreferences.Editor editor=sharedPreferences.edit();
//用SharedPreferences对象引用edit()方法并赋给SharedPreferences.Editor 对象,
editor.putString("as",e.getText().toString());
//用SharedPreferences.Editor 对象向数据库里传值,
//当然这里不仅可以用putString方法,也可以用putint等来传不同类型的值,以此类推
editor.commit();//最后调用commit方法提交数据,完成存储工作
}
});
}
//运行完之后,打开程序,在框中输入一些数据,这里传入的是字符串,点击按钮后,退出再进入,看看效果。
//然后删除框里的字符串,点击按钮后,退出程序再进入,看看效果,然后对比一下前后效果,找找感觉。
}
好了,看完上面的代码,想必对SharedPreferences数据存储这方面有些理解了。下面我们来学习一下,看看什么是SharedPreferences数据存储吧:
SharedPreferences数据存储:是一个轻量级存储类,用于保存一些常用配置,例如activity的状态等。它主要可概括成两部分,数据存储和数据读取。存储时以xml文件格式存储
1.通过键值方式来进行数据存储,那么键值是一种什么样的概念呢,例如上面代码中的
editor.putString(“as”,e.getText().toString());这句代码括号中前一个参数就是键值。每一条存储的数据都有对应的键值,读取数据时通过键值来读取,例如e.setText(shared.getString(“as”,”“));这两句的键值都是定为as的。
2.可以存储或读取多种类型的字符串,例如文中editor.putString(“as”,e.getText().toString());的putstring方法,这个就是专门存储字符串数据的,如果用getint()或getboolean()等以此类推可传入各种类型的数据。
数据读取时,根据它对应的存储类型使用get方法,例如字符串就是getString,布尔就是getBoolean同样以此类推。
3.上文代码中SharedPreferences sharedPreferences=getSharedPreferences(“sd”,MODE_PRIVATE);
中MODE_PRIVATE,默认操作模式无实际意义,与输入0的效果相同。
4.既然是数据存储,那么问题来了,数据存储到了那里呢,其实是存到了文件data/data/里的对应文件中。
最后呢,在分享一个关于登陆页面用户名和密码的存储问题的代码:
public class Main2Activity extends AppCompatActivity {
private EditText e1;
private EditText e2;
private Button b;
private CheckBox c;
int i=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
e1=findViewById(R.id.et1);
e2=findViewById(R.id.et2);
b=findViewById(R.id.bt);
c=findViewById(R.id.cb);
SharedPreferences shared=getSharedPreferences("use",MODE_PRIVATE);//***********
if(shared!=null){
e1.setText(shared.getString("use",""));
i=shared.getInt("q",10);
}
if (i==1){//当i==1时点击框就是被选中,就是为记住密码状态
c.setChecked(true);//将点击框设为选中状态
e2.setText(shared.getString("pass",""));
}//********这两行星号间是数据读取过程****************
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences sharedPreferences=getSharedPreferences("use",MODE_PRIVATE);
SharedPreferences.Editor editor=sharedPreferences.edit();
editor.putString("use",e1.getText().toString());
if(c.isChecked()){//判断点击框是否是选中,从而设置再次进入时点击框的状态。
i=1;
editor.putInt("q",i);
editor.putString("pass",e2.getText().toString());
}else {
i=0;
editor.putInt("q",i);
}
editor.commit();//**************这两行星号间是数据存储过程********
}
});
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.zhang.cunchu.Main2Activity">
<EditText
android:id="@+id/et1"
android:layout_width="match_parent"
android:layout_height="80dp" />
<EditText
android:id="@+id/et2"
android:layout_width="match_parent"
android:layout_height="80dp" />
<Button
android:id="@+id/bt"
android:layout_width="match_parent"
android:layout_height="80dp" />
<CheckBox //************************
android:id="@+id/cb" //运行时要勾选方框
android:layout_width="50dp" //*********************
android:layout_height="50dp
" />
<LinearLayout>