SharedPreferences数据存储

今天我学习了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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值