第六章《第一行代码》2.SharedPreference

我博客的相关说明

持久化技术

《第一行代码》第六章学习笔记

主要介绍三种方式

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中。退出应用,再打开后点击打印数据:
在这里插入图片描述
可以看到文件已经保存成功啦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值