欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android SharedPreferences实现数据存储功能

程序员文章站 2023-11-26 17:45:10
除了sqlite数据库外,sharedpreferences也是一种轻型的数据存储方式,不同于文件的存储方式,sharedpreferences是使用键值对(key-val...

除了sqlite数据库外,sharedpreferences也是一种轻型的数据存储方式,不同于文件的存储方式,sharedpreferences是使用键值对(key-value)数据的方式来存储数据的。而且sharedpreferences还支持多种不同的数据类型存储,因此,使用sharedpreferences来进行数据持久化要比使用文件方便很多,下面我们就来看一下它的具体用法吧。

如何将数据存储到sharedpreferences中

要想使用sharedpreferences来存储数据,首先需要获取到sharedpreferences对象。android中主要提供了三种方法用于得到sharedpreferences对象。

 1.context类中的getsharedpreferences()方法

此方法接收两个参数,第一个参数用于指定sharedpreferences文件的名称,如果指定的文件不存在则会创建一个,sharedpreferences文件都是存放在/data/data//shared_prefs/目录下的。
第二个参数用于指定操作模式,主要有两种模式可以选择,mode_private和mode_multi_process。mode_private仍然是默认的操作模式,和直接传入0效果是相同的,表示只有当前的应用程序才可以对这个sharedpreferences文件进行读写。mode_multi_process则一般是用于会有多个进程中对同一个sharedpreferences文件进行读写的情况。类似地,mode_world_readable和mode_world_writeable这两种模式已在android 4.2版本中被废弃。

 2.activity类中的getpreferences()方法

这个方法和context中的getsharedpreferences()方法很相似,不过它只接收一个操作模式参数,因为使用这个方法时会自动将当前活动的类名作为sharedpreferences的文件名。

3.preferencemanager类中的getdefaultsharedpreferences()方法

这是一个静态方法,它接收一个context参数,并自动使用当前应用程序的包名作为前缀来命名sharedpreferences文件。

得到了sharedpreferences对象之后,就可以开始向sharedpreferences文件中存储数据了,主要可以分为三步实现。

 1.调用sharedpreferences对象的edit()方法来获取一个sharedpreferences.editor对象。
 2.向sharedpreferences.editor对象中添加数据,比如添加一个布尔型数据就使用putboolean方法,添加一个字符串则使用putstring()方法,以此类推。
 3.调用commit()方法将添加的数据提交,从而完成数据存储操作。 

不知不觉中已经将理论知识介绍得挺多了,那我们就赶快通过一个例子来体验一下sharedpreferences存储的用法吧。

新建一个sharedpreferencestest项目,然后修改activity_main.xml中的代码,如下所示:

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >

  <button 
    android:id="@+id/save_data"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="save data"
    />

</linearlayout>

这里我们只是简单地放置了一个按钮,用于将一些数据存储到sharedpreferences文件当中。
然后修改mainactivity中的代码,如下所示:

public class mainactivity extends activity {

  private button savedata;

  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_main);
    savedata = (button) findviewbyid(r.id.save_data);
    savedata.setonclicklistener(new onclicklistener() {
      @override
      public void onclick(view v) {
        sharedpreferences.editor editor = getsharedpreferences("data",
            mode_private).edit();
        editor.putstring("name", "lily");
        editor.putint("age", 26);
        editor.putboolean("married", false);
        editor.commit();
      }
    });
  }

}

可以看到,这里首先给按钮注册了一个点击事件,然后在点击事件中通过getsharedpreferences()方法指定sharedpreferences的文件名为data,并得到了sharedpreferences.editor对象。接着向这个对象中添加了三条不同类型的数据,最后调用commit()方法进行提交,从而完成了数据存储的操作。

那么接下来我们自然要看一看,如何从sharedpreferences文件中去读取这些数据了。

从sharedpreferences中读取数据

sharedpreferences对象中提供了一系列的get方法用于对存储的数据进行读取,每种get方法都对应了sharedpreferences. editor中的一种put方法,比如读取一个布尔型数据就使用getboolean()方法,读取一个字符串就使用getstring()方法。这些get方法都接收两个参数,第一个参数是键,传入存储数据时使用的键就可以得到相应的值了,第二个参数是默认值,即表示当传入的键找不到对应的值时,会以什么样的默认值进行返回。

我们还是通过例子来实际体验一下吧,仍然是在sharedpreferencestest项目的基础上继续开发,修改activity_main.xml中的代码,如下所示:

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >

  <button 
    android:id="@+id/save_data"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="save data"
    />

  <button 
    android:id="@+id/restore_data"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="restore data"
    />

</linearlayout>


这里增加了一个还原数据的按钮,我们希望通过点击这个按钮来从sharedpreferences文件中读取数据。

修改mainactivity中的代码,如下所示:

public class mainactivity extends activity {

  private button savedata;

  private button restoredata;

  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_main);
    savedata = (button) findviewbyid(r.id.save_data);
    restoredata = (button) findviewbyid(r.id.restore_data);
    ……
    restoredata.setonclicklistener(new onclicklistener() {
      @override
      public void onclick(view v) {
        sharedpreferences pref = getsharedpreferences("data", mode_private);
        string name = pref.getstring("name", "");
        int age = pref.getint("age", 0);
        boolean married = pref.getboolean("married", false);
        log.d("mainactivity", "name is " + name);
        log.d("mainactivity", "age is " + age);
        log.d("mainactivity", "married is " + married);
      }
    });
  }

}

可以看到,我们在还原数据按钮的点击事件中首先通过getsharedpreferences()方法得到了sharedpreferences对象,然后分别调用它的getstring()、getint()getboolean()方法去获取前面所存储的姓名、年龄和是否已婚,如果没有找到相应的值就会使用方法中传入的默认值来代替,最后通过log将这些值打印出来。

通过这个简单的例子,我们就了解了如何利用sharedpreferences实现数据存储。相比之下,sharedpreferences存储确实要比文本存储简单方便了许多,应用场景也多了不少,比如很多应用程序中的偏好设置功能其实都使用到了sharedpreferences技术。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。