不同于文件的存储方式,SharedPreferences 是使用键值对的方式来存储数据的。也就是 说当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可 以通过这个键把相应的值取出来。而且 SharedPreferences 还支持多种不同的数据类型存储, 如果存储的数据类型是整型,那么读取出来的数据也是整型的,存储的数据是一个字符串, 读取出来的数据仍然是字符串。

这样你应该就能明显地感觉到,使用 SharedPreferences 来进行数据持久化要比使用文件方便很多,下面我们就来看一下它的具体用法吧。

6.3.1    将数据存储到 SharedPreferences 中

要想使用 SharedPreferences 来存储数据,首先需要获取到 SharedPreferences 对象。Android

中主要提供了三种方法用于得到 SharedPreferences 对象。

1.    Context 类中的 getSharedPreferences()方法 此方法接收两个参数,第一个参数用于指定 SharedPreferences 文件的名称,如果指

定的文件不存在则会创建一个,SharedPreferences 文件都是存放在/data/data/<package name>/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", "Tom"); editor.putInt("age", 28); editor.putBoolean("married", false);

editor.commit();

}

});

}

}

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

很简单吧?现在就可以运行一下程序了,进入程序的主界面后,点击一下 Save data 按钮。这时的数据应该已经保存成功了,不过为了要证实一下,我们还是要借助 File Explorer 来进行查看。切换到 DDMS 视图,并点击 File Explorer 切换卡,然后进入到/data/data/com. example.sharedpreferencestest/shared_prefs /目录下,可以看到生成了一个 data.xml 文件,如图 6.6 所示。

图   6.6

接下来同样是点击导出按钮将这个文件导出到电脑上,并用记事本进行查看,里面的内 容如图 6.7 所示。

图   6.7

可以看到,我们刚刚在按钮的点击事件中添加的所有数据都已经成功保存下来了,并且SharedPreferences 文件是使用 XML 格式来对数据进行管理的。 那么接下来我们自然要看一看,如何从 SharedPreferences 文件中去读取这些数据了。

从 SharedPreferences 中读取数据

你应该已经感觉到了,使用 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 将这些值打印出来。

现在重新运行一下程序,并点击界面上的 Restore data 按钮,然后查看 LogCat 中的打印 信息,如图 6.8 所示。

图   6.8

所有之前存储的数据都成功读取出来了!通过这个例子,我们就把 SharedPreferences 存储的知识也学习完了。相比之下,SharedPreferences 存储确实要比文本存储简单方便了许多, 应用场景也多了不少,比如很多应用程序中的偏好设置功能其实都使用到了 SharedPreferences 技术。

转载于:https://www.cnblogs.com/zgqys1980/p/5238413.html

android: SharedPreferences存储相关推荐

  1. android SharedPreferences 存储对象

    原文地址为: android SharedPreferences 存储对象 我们知道SharedPreferences只能保存简单类型的数据,例如,String.int等. 如果想用SharedPre ...

  2. android sharedpreferences 存储对象,android中SharedPreferences实现存储用户名功能

    1. 简介 SharedPreferences是一种轻型的数据存储方式,通过key-value键值对的方式将数据存储在xml文件中,常用于存储简单的配置信息. 2. 使用方式 2.1 获取Shared ...

  3. Android SharedPreferences存储map的方法

    在网上查了一些资料后,精简改写后得出自己想用的形式,记录一下 public static void putHashMapData(Context context, String key, Map< ...

  4. Android入门(九)文件存储与SharedPreferences存储

    原文链接:http://www.orlion.ga/578/ Android系统中主要提供了三种方式用于简单地实现数据持久化功能,即文件存储.SharedPreference存储以及数据库存储.当然, ...

  5. android SharedPreferences数据存储

    android  SharedPreferences数据存储 很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友.对于软件配置参数的保存 ...

  6. Android——数据存储(课堂代码整理:SharedPreferences存储和手机内部文件存储)...

    layout文件: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmln ...

  7. Android数据存储(内部,外部,SharedPreferences,SQlite)

    数据的存储位置 内部存储:data/data/对应包名/files/文件名 外部存储:/storage/emulated/0/对应包名/文件 内部存储的读写 写 String file="d ...

  8. Android数据存储、文件存储、SQLite数据库简单使用、 sharedPreferences存储(五)

    文章目录 5 数据存储 5.1 数据的存储方式 5.2 文件存储 5.2.1 将数据存入文件中 5.2.2 从文件中读取数据 5.2.3 实战演练-保存QQ账号和密码(内部存储) 5.2.4 实战演练 ...

  9. Android之SharedPreferences 存储复杂对象

    用SharedPreferences存储一些常用的设置信息很方便,但是我们知道SharedPreferences只能存储一些简单的类型 如何用SharedPreferences来存储一些复杂的对象?下 ...

最新文章

  1. 关于软件开发你真正需要知道的几个事情
  2. 创建vue项目+总结使用(跨域问题+vue 创建)
  3. Python print函数用法,print 格式化输出
  4. 11 mybatis-高级应用
  5. 数学建模学习笔记——数学规划
  6. 2021年下信息系统项目管理师报考和考试时间
  7. HTML5+CSS3实现的小风车-转动的童年
  8. C++ 动态线性表的顺序存储结构(数组实现)
  9. 算法训练 字符串的展开
  10. 在ubuntu 16.04里使用python—scrapy将爬取到的数据存到mysql数据库中的一些随笔
  11. androidentity什么用_Android multipartentity的用法
  12. ScrollView中布局不能充满ScrollView的问题
  13. NXP S32K1 Timer之LPIT模块Driver分析
  14. 打电话流程(打电话时,从拨出电话到接听电话的几秒经历了什么)
  15. 企业中如何做好文化建设?
  16. python将数字转换为中文_Python:将数字转换为文字
  17. 亚利桑那州接受加密货币纳税的计划受挫
  18. 玩 High API 系列好文(一):智能客服、钉钉Ding功能、智能云相册、快速实现身份验证
  19. CREO3.0二次开发+VS2012环境配置
  20. 蓝桥杯,ACM算法视频及文档资料『免费送』

热门文章

  1. Android下载图片路径问题
  2. 关于error:Cannot assign to 'self' outside of a method in the init family
  3. [Azure] Azure 中国服务使用注意事项及兼容版存储访问工具
  4. Nginx配置文件粗解
  5. 分享Silverlight/WPF/Windows Phone一周学习导读(07月25日-07月31日)
  6. verilog中对inout信号的处理
  7. matlab自适应逆控制,基于matlab仿真模块的自适应有源噪声逆控制研究
  8. python网络编程例子
  9. JDK源码解析之集合篇2--Collection
  10. rocketMq-producer介绍