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

简介: 原文地址:http://android.xsoftlab.net/training/basics/data-storage/index.html引言大多数的安卓APP需要保存数据,即使仅仅存储在onPause状态下的信息,这样的话,用户的进度信息就不会被丢失。

原文地址: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);
目录
相关文章
|
4月前
|
开发工具 Android开发 开发者
Android平台如何不推RTMP|不发布RTSP流|不实时录像|不回传GB28181数据时实时快照?
本文介绍了一种在Android平台上实现实时截图快照的方法,尤其适用于无需依赖系统接口的情况,如在RTMP推送、RTSP服务或GB28181设备接入等场景下进行截图。通过底层模块(libSmartPublisher.so)实现了截图功能,封装了`SnapShotImpl.java`类来管理截图流程。此外,提供了关键代码片段展示初始化SDK实例、执行截图、以及在Activity销毁时释放资源的过程。此方案还考虑到了快照数据的灵活处理需求,符合GB/T28181-2022的技术规范。对于寻求更灵活快照机制的开发者来说,这是一个值得参考的设计思路。
|
6月前
|
XML 存储 JSON
51. 【Android教程】JSON 数据解析
51. 【Android教程】JSON 数据解析
153 2
|
6月前
|
存储 API 文件存储
47. 【Android教程】SharedPreferences 存储
47. 【Android教程】SharedPreferences 存储
69 2
|
7月前
|
数据库 Android开发
Android 通过升级SettingsProvider数据强制覆盖用户的设置项
Android 通过升级SettingsProvider数据强制覆盖用户的设置项 【5月更文挑战第7天】
183 5
|
7月前
|
JSON Android开发 数据格式
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
88 2
|
2月前
|
存储 大数据 数据库
Android经典面试题之Intent传递数据大小为什么限制是1M?
在 Android 中,使用 Intent 传递数据时存在约 1MB 的大小限制,这是由于 Binder 机制的事务缓冲区限制、Intent 的设计初衷以及内存消耗和性能问题所致。推荐使用文件存储、SharedPreferences、数据库存储或 ContentProvider 等方式传递大数据。
83 0
|
4月前
|
存储 安全 API
Android经典实战之存储方案对比:SharedPreferences vs MMKV vs DataStore
本文介绍了 Android 开发中常用的键值对存储方案,包括 SharedPreferences、MMKV 和 DataStore,并对比了它们在性能、并发处理、易用性和稳定性上的特点。通过实际代码示例,帮助开发者根据项目需求选择最适合的存储方案,提升应用性能和用户体验。
121 1
|
4月前
|
JSON Java Android开发
Android 开发者必备秘籍:轻松攻克 JSON 格式数据解析难题,让你的应用更出色!
【8月更文挑战第18天】在Android开发中,解析JSON数据至关重要。JSON以其简洁和易读成为首选的数据交换格式。开发者可通过多种途径解析JSON,如使用内置的`JSONObject`和`JSONArray`类直接操作数据,或借助Google提供的Gson库将JSON自动映射为Java对象。无论哪种方法,正确解析JSON都是实现高效应用的关键,能帮助开发者处理网络请求返回的数据,并将其展示给用户,从而提升应用的功能性和用户体验。
106 1
|
4月前
|
缓存 API Android开发
Android经典实战之Kotlin Flow中的3个数据相关的操作符:debounce、buffer和conflate
本文介绍了Kotlin中`Flow`的`debounce`、`buffer`及`conflate`三个操作符。`debounce`过滤快速连续数据,仅保留指定时间内的最后一个;`buffer`引入缓存减轻背压;`conflate`仅保留最新数据。通过示例展示了如何在搜索输入和数据流处理中应用这些操作符以提高程序效率和用户体验。
56 6
|
4月前
|
编解码 网络协议 前端开发
如何实现Android平台GB28181设备接入模块按需打开摄像头并回传数据
后台采集摄像头,如果想再进一步扩展,可以把android平台gb28181的camera2 demo,都移植过来,实现功能更强大的国标设备侧,这里主要是展示,收到国标平台侧的回传请求后,才打开摄像头,才开始编码打包,最大限度的减少资源的占用