前言:

程序中处理的大部分问题都与数据有关,读取数据显示在UI上,读取的数据可以是本地的,也可以是网络的。保存用户数据到存储空间,可以是本地的数据库,文件等,也可以是保存到网络服务器。总之大部分的程序都是在和数据打交道。Android中数据保存比较方便灵活,今天就按照官网说说数据保存。

大多数Android应用程序都需要存储数据,在Android生命周期方法onPause中,你可以保存用户在程序中的进度数据,在用户再次进入程序时进行读取恢复。可能一些应用程序不需要保存用户的进度信息,但是用户对于应用程序的设置信息一定要保存。很多应用需要保存大量的数据到数据库或者文件里,比如看电视的应用,需要保存大量的频道信息。下面就给大家介绍一下在Android中数据是如何保存的。

key-value键值集合保存数据:

如果你有一些相对较少的键值数据集需要保存,那么SharedPreferences应该能够满足你。一个SharedPreferences对象指向了一个键值对形式保存数据的Shared Preference文件,它提供了一些很方便读取和写入数据的方法。每一个SharedPreferences文件都被Android framework管理,可以是只能创建它的应用程序访问,也可以分享给其他应用程序。怎么用SharedPreferences·保存数据呢?

获取SharedPreferences对象:

你可以创建一个新的Shared Preference 共享文件,如果已经存在则直接返回指向该共享文件的SharedPreferences该对象,有两种方法可以完成这个工作:

  • getSharedPreferences(String name, int mode)
    此方通通过Context对象调用,返回一个唯一的SharedPreferences对象,这里的唯一指的是通过name来查找的唯一对应的SharedPreferences,如果没有查找到则会用name来创建一个。唯一的好处就是你在一个地方保存后在另外的地方立刻就能读取到这个值。用mode来区分创建的SharedPreferences对象共享类型,MODE_PRIVATE表示该应用程序私有,MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE是表示全局读或写权限,MODE_MULTI_PROCESS表示可以跨进程访问。
  • getPreferences(int mode)
    此方法被Activity对象调用,会创建一个只能被该Activity访问的SharedPreferences对象,该方法是封装的上面的那个方法,默认创建的SharedPreferences名字是该Activity的名字,所以不用传此参数,mode只有MODE_PRIVATE、MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE三个可选,缺少MODE_MULTI_PROCESS,因为只有该Activity有权限访问,所以跨进程没什么用。
举个例子:
Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
getString(R.string.preference_file_key),Context.MODE_PRIVATE);

  

上面的代码是在一个Fragment中调用的,getActivity()是获取Fragment所在的Activity对象(Activity是继承自Context),R.string.preference_file_key是该SharedPreferences的名字,mode是Context.MODE_PRIVATE私有类型。
 
注意:当你给SharedPreferences起名字的时候最好是复杂点的,这样就能保证不会有名字重复却属于不同应用程序的SharedPreferences,最好是以你的应用包名再加上其他构成,比如"com.example.myapp.PREFERENCE_FILE_KEY"。
 
获取一个Activity的SharedPreferences代码如下:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
上面是创建了一个Activity私有的SharedPreferences对象。
 

注意:当你创建SharedPreferences时mode值的是MODE_WORLD_PRIVATE或者MODE_WORLD_WRITEABLE,你创建的Shared Preferences文件是可以被其他应用程序访问的。这两种mode都是比较危险的,因为其他应用程序也能访问,所以会造成数据外泄。google给出的建议是尽量不要用这种机制来进行数据共享传递,可以用其他方法来代替这种机制,比如使用ContentProvider,BroadcastReceiver或者Service。

 

写入数据到Shared Preferences文件:

写入数据到Shared Preferences是通过获取SharedPreferences.Editor对象,调用该对象的一些putXX(key,value)方法来写入key对应的值,然后调用commit()方法提交写入完成的,代码如下:

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

  

SharedPreferences.Editor对象的putXX(String key,数据类型)方法可以保存boolean、int、float、long、String和Set<String>类型的数据,但是put方法只是建立好键值对的数据联系,并没有保存,直到你调用commit()或者apply()方法。调用remove(String key)可以清除key对应的数据(还需要调用commit方法提交操作),你也可以调用clear()方法把所有数据清除掉。
 
注意:commit()和apply()都是提交对数据的操作,但是它们还是有些区别的:
1、commit方法有返回值,返回值是一个boolean变量,表示你的保存动作是否成功,apply是没有返回值的,所以如果你不需要返回值,也不关心提交是否成功可以用apply来代替commit;
2、apply是先把数据更改提交到内存,然后再异步保存到磁盘上,而commit这两个操作是同步的,所以在进行频繁提交数据更改时apply更为高效;
 

读取数据从Shared Preferences文件:

 
从Shared Preferences文件读取之前保存的数据比较简单,通过SharedPreferences对象的getXX方法就能完成,代码如下:
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);

  

SharedPreferences的getXX(String key, defValue)方法key就是之前调用SharedPreferences.Editor的put(String key,数据类型)方法时的key,defValue是在找不到对应的key的数据时返回的默认数据。
 

总结:

保存数据分四步:
1、获取SharedPreferences对象;
2、获取SharedPreferences.Editor对象;
3、调用put方法添加数据;
4、调用commit保存数据;
获取数据很简单,分两步:
1、获取SharedPreferences对象;
2、调用get方法获取key对应的值;
 

以上就是利用SharedPreferences进行数据保存的知识,基本上包含了所有使用SharedPreferences的方法和注意事项,有哪些地方写的不好还请大神们批评指正。下一篇文章继续聊Android中的数据保存之文件保存,谢谢大家!

本文属原创,转载请注明出处,违者必究

关注微信公众平台:程序员互动联盟(coder_online),你可以第一时间获取原创技术文章,和(java/C/C++/Android/Windows/Linux)技术大牛做朋友,在线交流编程经验,获取编程基础知识,解决编程问题。程序员互动联盟,开发人员自己的家。

Android数据保存之SharedPreference的更多相关文章

  1. Android数据保存之文件保存

    前言: 上一篇文章写了在Android中利用SharedPreferences保存数据,SharedPreferences在保存数据的时候主要是保存一些应用程序的设置信息或者少量的用户信息,并且是以k ...

  2. android数据保存

    永久保存数据的方法:1.Shared Preferences 以键值对的形式存储基本数据类型( booleans, floats, ints, longs, and strings),存储的数据在限制 ...

  3. android数据保存之greendao

    有时我们的数据属于保存到数据库,对于Android应用和IOS应用,我们一般都会使用SQLite这个嵌入式的数据库作为我们保存数据的工具.由于我们直接操作数据库比较麻烦,而且管理起来也非常的麻烦,以前 ...

  4. MTK Android Android数据保存到系统数据库

    如果有留意Android中系统设置Settings里面的源码,你会发现代码中频繁用到了Settings.System操作,该类通过键值对的形式,将一些特定的值以全局的模式保存到Setting的数据库中 ...

  5. Android中的数据保存

    形式 Android的数据保存分为3种形式:file, SharedPreference, Database 文件 主要思想就是通过Context类中提供的openFileInput和openFile ...

  6. Android少量数据保存之SharedPreferences接口实例

    SharedPreferences数据保存主要是通过键值的方式存储在xml文件中 xml文件在data/此程序的包名/XX.xml 格式 <?xml version='1.0' encoding ...

  7. Android数据存储(1)少量数据保存之SharedPreferences接口实例

    SharedPreferences数据保存主要是通过键值的方式存储在xml文件中 xml文件在data/此程序的包名/XX.xml 格式 <?xml version='1.0' encoding ...

  8. android之保存偏好设置信息到shareSharedPreferences,轻量级的保存数据的方法

    android之保存偏好设置信息到shareSharedPreferences,轻量级的保存数据的方法   SharedPreferences保存数据到xml文件 有时候要保存activity的某些状 ...

  9. [Android] Android GreenDao 保存 JavaBean 或者List <JavaBean>类型数据

    Android GreenDao 保存 JavaBean 或者List <JavaBean>类型数据 简介 数据库存储数据基本上每个APP都有用到,GreenDAO 是一个将对象映射到 S ...

随机推荐

  1. TensorFlow升级到1.13

    win10下: 安装后import tensorflow出错:tensorflow/python/lib/core/bfloat16.cc:675] Check failed: PyBfloat16_ ...

  2. node-sass 不能正常安装解决办法

    web前端在安装node包时,总是报错,究其原因是node-sass没有被正常安装. 根本原因是国内网络的原因. 最终的解决方法是通过淘宝的npm镜像安装node-sass 首先安装cnpm npm ...

  3. 使用kbmMWConfiguration 让 kbmmw smartservice 更聪明

    以前的文章介绍了 很多 kbmmw smartservice 的使用,尤其是 rest 服务,所有的的配置都是通过 开发时写编码实现的,这样就可能导致,针对不同的应用环境,我们要重新编译代码,当然也可 ...

  4. (26)A delightful way to teach kids about computers

    https://www.ted.com/talks/linda_liukas_a_delightful_way_to_teach_kids_about_computers/transcript00:1 ...

  5. bgfx入门练习3——编译自定义Shader

    马个鸡,总算编译过了自定义Shader,在此感谢自己,感谢自己,以及感谢自己.没有自己的努力,我是不可能解决这个问题的,自己真是太叼了.妈的智障!!! 管方那屎一样的make工具根本没用,反正我是折腾 ...

  6. java操作FTP的一些工具方法

    java操作FTP还是很方便的,有多种开源支持,这里在apache开源的基础上自己进行了一些设计,使用起来更顺手和快捷. 思路: 1.设计FTPHandler接口,可以对ftp,sftp进行统一操作, ...

  7. ffmpeg源码编译安装(Compile ffmpeg with source) Part 2 : 扩展安装

    在Ubuntu,Debian,Mint上编译ffmpeg 本文主要为在Ubuntu,Debian和Mint上编译安装ffmpeg和库文件以及一些扩展的编解码器.当然这与从源中安装无关. 请首先看一下通 ...

  8. Solr Cloud安装

    1. zookeeper-3.4.10安装: zoo.cfg配置文件: dataDir=/usr/share/zookeeper/data/ clientPort=2181 server.1=10.0 ...

  9. OC中NSString的使用、字符串的使用

    字符串作为OC语言的基本对象类型,被我们在各种地方广泛使用,因此熟悉掌握字符串的属性和方法,是OC必不可少的基础之一. 字符串分为可变字符串(NSMutableString)和不可变字符串(NSStr ...

  10. lambada

    一.动态创建 ParameterExpression parameter = Expression.Parameter(typeof(User), "u"); //创建委托 Mem ...