原文地址:http://android.xsoftlab.net/training/basics/data-storage/index.html

引言

大多数的安卓APP需要保存数据,即使仅仅存储在onPause状态下的信息,这样的话,用户的进度信息就不会被丢失。大多数重量级的APP还需要保存用户的设置信息,还有一些APP必须管理在文件或者数据库中存储的大量信息。这节课会介绍Android中的数据的主要存储方式,包括以下几点:

  • 在共享参数文件中存储简单的键值对信息
  • 在Android文件系统中存储任意的文件
  • 使用SQLite数据库管理系统

存储键值对序列

原文地址:http://android.xsoftlab.net/training/basics/data-storage/shared-preferences.html

如果你有个相对简单的键值对序列需要保存,你应该使用SharedPreferences API。一个SharedPreferences指向的是一个文件,这个文件包含了键值对。并且SharedPreferences提供了简单的方法可以读取或者写入数据。每一个SharedPreferences文件都是被Framework框架所管理的,它可以是私有的或者是公开的。

这节课向你展示了如何使用SharedPreferences API来存储和接收简单的值。

**Note:**SharedPreferences API仅仅可以用来读取和写入键值对,你不应该将它与Preference API搞混,Preference API可以帮助你构建APP设置的用户界面(尽管Preference内部使用的是SharedPreferences来保存APP的设置信息的)。更多有关使用Preference API的相关信息,请参见Settings向导。

获取SharedPreferences的句柄

你可以创建一个共享参数文件或者访问一个已经存在的共享参数文件,通过调用以下两者之一的方法:

  • getSharedPreferences() 如果需要多个共享参数文件的话可以使用这个方法,每个文件都拥有一个标识符,可以通过这个标识符通过该方法的第一个参数获得共享参数对象。你可以通过APP中的任意Context对象调用它。
  • getPreferences() 只可以在Activity中使用该方法。该方法适用于你只需要一个与该Activity有关的共享参数文件。因为这个方法会返回一个属于这个Activity的默认的共享参数文件,你不必要去指定共享参数的名称。

举个例子,下面这段代码会在Fragment中执行。这里使用了一个字符串资源来作为共享参数的标识符,并通过该标识符获得对应的共享参数对象,并且以私有的模式打开它,所以这个文件只仅限在你的APP内访问。

Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE);

当需要命名你的共享参数文件时,你应该使用APP的唯一标识符来命名,比如”com.example.myapp.PREFERENCE_FILE_KEY”

或者,如果你只需要一个与Activity关联的共享参数文件,你可以使用getPreferences()方法:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);

警告:如果你使用了MODE_WORLD_READABLE或者MODE_WORLD_WRITEABLE模式创建了一个共享参数文件,那么知道文件标识符的其它APP也可以访问你的数据。

写入数据到共享参数中

为了可以写入数据到共享参数文件中,需要通过调用SharedPreferences的edit()方法创建一个SharedPreferences.Editor对象。

通过putInt()或putString()方法传入你想写入的键值对数据,然后调用commit()存储更改:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();

从共享参数中读取数据

如果要从共享参数文件中读取数据,调用比如getInt()或getString()方法,然后传入你想获取值的键,如果键不存在,则会返回一个默认值:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);

Android官方开发文档Training系列课程中文版:数据存储之键值对序列存储相关推荐

  1. Android官方开发文档Training系列课程中文版:目录

    原文地址 : http://android.xsoftlab.net/training/index.html 引言 在翻译了一篇安卓的官方文档之后,我觉得应该做一件事情,就是把安卓的整篇训练课程全部翻 ...

  2. Android官方开发文档Training系列课程中文版:创建自定义View之View的创建

    原文地址:http://android.xsoftlab.net/training/custom-views/index.html 引言 Android框架含有大量的View类,这些类用来显示各式各样 ...

  3. Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制

    原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html 如果你还不清楚如何定义图形及坐标系统,请移步:Android官方 ...

  4. Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建

    原文地址:http://android.xsoftlab.net/training/basics/fragments/index.html 导言 为了在Android中创建动态的多面板用户界面,你需要 ...

  5. Android官方开发文档Training系列课程中文版:构建第一款安卓应用之入门指南

    入门指南 欢迎来到安卓开发训练课,在这里你可以找到一系列课程来描述如何使用现有的代码示例来重新适用到你的APP上,你可以在左侧的导航栏顶部看到在若干个大项里有若干个有组织的子项课程.(导航栏请参见官方 ...

  6. Android官方开发文档Training系列课程中文版:Android的安全建议

    原文地址:http://android.xsoftlab.net/training/articles/security-tips.html Android系统内置的安全策略可以有效的降低应用程序的安全 ...

  7. Android官方开发文档Training系列课程中文版:连接无线设备之通过P2P搜索网络服务

    原文地址:http://android.xsoftlab.net/training/connect-devices-wirelessly/nsd-wifi-direct.html 本阶段的第一节课 U ...

  8. Android官方开发文档Training系列课程中文版:动画视图之创建自定义转场动画

    原文地址:http://android.xsoftlab.net/training/transitions/custom-transitions.html 自定义转场可以创建自定义动画.比如,可以定义 ...

  9. Android官方开发文档Training系列课程中文版:通过NFC共享文件之从其它设备接收文件

    原文地址:http://android.xsoftlab.net/training/beam-files/receive-files.html Android Beam文件传输系统会将文件拷贝到接收设 ...

最新文章

  1. ADC中宽带巴伦的使用
  2. HTML5 canvas drawImage() 方法记录
  3. 在Python中连接字符串的首选方法是什么?
  4. web前端之HTML中的div
  5. k8s部署nacos集群:3个pod、连接外部mysql读写分离集群
  6. Minimum Diameter Tree
  7. android 如何保留数据两位小数
  8. jquery 使用textarea
  9. 一张图看懂OSPF邻接关系建立及报文类型
  10. java:数据结构面试题
  11. HashMap 的底层
  12. 各种气象数据下载地址推荐
  13. PyCharm小技巧分享—主菜单消失再显示
  14. 2018.6清北学堂day3上午笔记
  15. python解释器中help的用法
  16. 51单片机的定时器/计数器
  17. 2020年安卓各大应用市场份额占比分析,Android自定义View详解
  18. selenium处理iframe标签
  19. hive 神盾特工局_《神盾局特工》沃德身份确认 九头蛇反派—蜂巢
  20. 导入Excel时数据类型处理工具类

热门文章

  1. std::vector中resize()和reserve()区别
  2. vmware与windows共享文件夹
  3. NILMTK——深扒组合优化(CO)和FHMM细节
  4. problem b: 一年中的第几天_第九届蓝桥杯B组试题
  5. 《数据结构与算法之美》学习汇总
  6. Java 包及访问权限
  7. 【Kaggle微课程】Natural Language Processing - 3. Word Vectors
  8. 泰坦尼克号生存预测入门
  9. LeetCode 1254. 统计封闭岛屿的数目(图的BFS DFS)
  10. python爬虫爬微信红包_python 微信红包