当前位置: 首页 > 编程笔记 >

Android SharedPreferences实现数据存储功能

井宪
2023-03-14
本文向大家介绍Android SharedPreferences实现数据存储功能,包括了Android SharedPreferences实现数据存储功能的使用技巧和注意事项,需要的朋友参考一下

除了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技术。

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

 类似资料:
  • 问题内容: 我正在尝试开发一个python程序,该程序允许用户输入有关个人详细信息的数据,并在以后查看它们以进行处理。 该程序可供少于5个人同时使用。因此,我正在考虑使用数据库,因为我认为它应该能够应付这么多的流量。 我想到的框架工作是,客户端将在每台计算机上拥有自己的python pyqt程序副本。每当他们执行任何需要读取/写入数据的操作时,它将通过Internet连接到服务器并从服务器上的读取

  • 本文向大家介绍Python通过调用mysql存储过程实现更新数据功能示例,包括了Python通过调用mysql存储过程实现更新数据功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python通过调用mysql存储过程实现更新数据功能。分享给大家供大家参考,具体如下: 一、需求分析 由于管理费率配置错误,生成订单的还本付息表和订单表的各种金额,管理费之间的计算都有错误,需要进行数据订

  • 本文向大家介绍Python编写通讯录通过数据库存储实现模糊查询功能,包括了Python编写通讯录通过数据库存储实现模糊查询功能的使用技巧和注意事项,需要的朋友参考一下 1.要求 数据库存储通讯录,要求按姓名/电话号码查询,查询条件只有一个输入入口,自动识别输入的是姓名还是号码,允许模糊查询。 2.实现功能 可通过输入指令进行操作。 (1)首先输入“add”,可以对通讯录进行添加联系人信息。 (2)

  • 数据存储 Cookie 浏览器中的 Cookie 是指小型文本文件,通常在 4KB 大小左右。(由键值对构成用 ; 隔开)大部分时候是在服务器端对 Cookie 进行设置,在头文件中 Set-Cookie 来对 Cookie 进行设置。 页面可以访问当前页的 Cookie 也可以访问父域的 Cookie。 属性 属性 默认值 作用 Name(必填) 名 Value(必填) 值 Domain 当前文

  • 前端数据存储工具 YDN-DB forerunner AlaSQL LokiJS lovefiled Dexie.js localForage pouchdb

  • 本文向大家介绍layui实现数据分页功能,包括了layui实现数据分页功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了layui实现数据分页功能,供大家参考,具体内容如下 官网layui table演示页面 示例截图: 页面引入layui.css、 layui.js 前台js 业务逻辑层 sql 其中sql在计算总数totle时可以这么写 以上就是本文的全部内容,希望对大家的学习