专栏首页LeoXu的博客[翻译]Android教程-保存数据-保存键值对

[翻译]Android教程-保存数据-保存键值对

来源:

http://developer.android.com/training/basics/data-storage/index.html

http://developer.android.com/training/basics/data-storage/databases.html

学习本教程的前置条件:

  • Android 1.6 (API Level 4) 或者更高
  • 熟悉Map键值对集合
  • 数字Java文件IO的API
  • 熟悉SQL数据库

大多数Android应用需要存储数据,即使只是在onPause()期间存储有关应用的状态信息,以便用户的操作进度不会丢失掉。

即使是最非凡的应用也需要存储用户设置,而某些应用则必须在文件和数据库中管理大量的信息。

本课程向你介绍向你介绍在Android中存储数据的主要选择,包括:

  • 在一个共享的首选项文件中保存简单数据类型的键值对
  • 在Android的文件系统中保存任意文件
  • 使用有SQLite管理的数据库

保存键值对

如果你有一小撮键值对想要保存,你就应该使用SharedPreferences API. SharedPreferences对象指向一个包含键值对的文件,并且提供读写这些键值对的简单方法。

每一个SharedPreferences文件由框架来进行管理,并且可以是私有的或者是共享的。

这里向你展示如何使用SharedPreferences API来存储和获取简单的值。

注意:SharedPreferences API只用于读写键值对,而你不应该将它们同Preference API混淆,后者帮助你为你的应用设置构建用户界面(尽管它们使用了SharedPreferences作为它们保存应用设置的实现)。有关Preference的信息,见Settings指南。

得到一个处理SharedPreferences的Handle

通过调用下面两种方法之一,你可以创建一个新的,或者是访问一个已经存在的共享首选项文件:

  • getSharedPreferences() — 如果你需要多个由名称标示的共享首选项文件,就可以使用这个方法. 你可以从任何你的应用中的Context处调用这个方法.
  • getPreferences() — 如果你只需要一个用于activity的共享首选项,就可以使用这个方法. 因为这个方法会获取属于这个activity的共享首选项文件, 你没必要再给这个文件指定一个名称.

例如,下面的代码会在一个Fragment中被执行。它会访问有资源字符串 R.string.preference_file_key标识共享首选项文件, 并且使用私有模式打开它,那样这个文件就只能被你的应用所访问了.

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

当为你的共享首选项文件命名时,你应该使用一个能被你的应用识别为唯一的名称,比如“com.example.myapp.PREFERENCE_FILE_KEY”

此外,如果你只需要在你的activity中用到一个共享首选项文件是,你可以使用getPreferences()方法。

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

注意:如果你创建了带有 MODE_WORLD_READABLE 或者 MODE_WORLD_WRITEABLE的共享首选项文件,那么其它知道这个文件标识的应用也可以访问到你的数据.

写入共享首选项

为了向一个共享首选项文件写入,通过在你的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);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 有意思,使用FtpClient上传文件,上传后的文件总是会莫名奇妙的变大

    代码主要是从手机上选择照片上传到服务端,具体实现逻辑中,服务端会先将上传请求中的文件数据放到服务端机器的缓存目录,然后再从缓存目录挪到另外一台FTP服务其中。

    LeoXu
  • ActionScript的事件处理机制处理机制

    ActionScript和JavaScript的事件处理机制处理机制几乎完全相同,所不同的主要是ActionScript的事件处理机制还提供了一个 事...

    LeoXu
  • [翻译]Android教程-保存数据-保存文件

    http://developer.android.com/training/basics/data-storage/files.html

    LeoXu
  • Kubernetes K8S之存储Secret详解

    Secret解决了密码、token、秘钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量...

    踏歌行
  • 源码解析:Git的第一个提交是什么样的?

    导读:经过不断地迭代,如今Git的功能越来越完善和强大。然而Git的第一个提交源码仅约1000行,当时的Git实现了哪些功能?本文将从源码开始,分析其核心思想,...

    用户6543014
  • 虽获滴滴投资,但我们依旧不看好ofo的未来

    镁客网
  • redis延伸

    redis 中有类似于事务的东西,保证事务执行时不被其他客户端发来的请求中断。但是和关系数据库并不相同。它的事务不支持回滚操作,因此在统一执行事务中所有命令时,...

    小闫同学啊
  • 帮助官方 NuGet 解掉 Bug,制作绝对不会传递依赖的 NuGet 包

    发布于 2018-08-05 13:22 更新于 2018-08...

    walterlv
  • 邀您参加 | 腾讯云自研数据库CynosDB技术交流会

    All in 云+时代,数据库的高可用性、按需付费、按需扩展等属性解放了大批开发者。腾讯发布的自研数据库CynosDB作为国内首款同时兼容MySQL和PG的云原...

    腾讯云数据库 TencentDB
  • 帮助官方 NuGet 解掉 Bug,制作绝对不会传递依赖的 NuGet 包

    如果你希望做一个 NuGet 工具包,那么这个包一定不能作为依赖传递给下一个包。典型的例子,做一个生成版本号的工具 NuGet 包,或者做一个代...

    walterlv

扫码关注云+社区

领取腾讯云代金券