Android 的数据存储——SharePreferences

SharedPreferences的使用

  有些时候,应用程序有少量的数据需要保存,而且这些数据的格式很简单:都是普通的字符串、标量类型的值等,比如应用程序的各种配置信息(如是否打开音效、是否使用振动效果等)、小游戏的玩家积分(如扫雷英雄榜之类的)等,对于这种数据,Android提供了SharedPreferences进行保存。

SharedPreferences与Editor简介

  SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此它保存的数据主要是简单类型的key-value对。

  SharedPreferences接口主要负责读取应用程序的Preferences数据,它提供了如下常用方法访问SharedPreferences中的key-value对。

  • boolean contains(String key):判断SharedPreferences是否包含特定key的数据。
  • abstract Map<String,?> getAll():获取SharedPreferences数据里全部的key-value对。
  • boolean getXxx(String key,xxx defaultValue):获取SharedPreferences数据里指定key对应的value。如果该key不存在,返回默认值defaultValue。其中xxx可以是boolean、float、int、long、String等各种基本类型的值。

  SharedPreferences接口本身并没有提供写入数据的能力,而是通过SharedPreferences的内部接口,SharedPreferences调用edit()方法即可获取它所对应的Editor对象。Editor提供了如下方法来向SharedPreferences写入数据。

  • SharedPreferences.Editor clear():清空SharedPreferences里的所有数据。
  • SharedPreferences.Editor putXxx(String key,xxx value):向SharedPreferences存入指定key对应的数据。其中xxx可以是boolean、float、int、long、String等各种基本类型的值。
  • SharedPreferences.Editor remove(String key):删除SharePreferences里指定key对应的数据项。
  • boolean commit():当Editor编辑完成后,调用该方法提交修改。

  SharedPreferences 本身是一个接口,程序无法直接创建SharedPreference实例,只能通过Context提供的getSharedPreferences(String name,int mode)方法来获取SharedPrefereces实例,该方法的第二个参数(mode)支持如下几个值。

  • Context.MODE_PRIVATE:指定该SharedPreferences数据只能被本应用程序读、写。
  • Context.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其他应用程序读,但不能写。
  • Context.MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序读、写。

实例

 实例向SharedPreferences中写入、读取数据,该程序的界面很简单,它只是提供两个按钮,其中一个写数据,另一个用于读取数据。布局文件比较简单,就不贴出来了。

public class SharePreferencesActivity extends Activity {

    SharedPreferences preferences;
    SharedPreferences.Editor editor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_share_preferences);

        //获取只能被本应用程序读、写的SharedPreferences对象
        preferences=getSharedPreferences("crazyit", MODE_PRIVATE);
        editor=preferences.edit();
        Button read=(Button)findViewById(R.id.read);
        Button write=(Button)findViewById(R.id.write);

        read.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // 读取字符串数据
                String time=preferences.getString("time", null);
                //读取int类型的数据
                int randNum=preferences.getInt("random", 0);

                String result=time==null?"你暂时还未写入数据":"写入时间为: "
                            +time+"\n上次生成的随机数为: "+randNum;
                //使用Toast提示信息
                Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();

            }
        });

        write.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                SimpleDateFormat adf=new SimpleDateFormat("yyyy年MM月dd月 "
                                                +"hh:mm:ss");
                //存入当前时间
                editor.putString("time", adf.format(new Date()));

                editor.putInt("random", (int)(Math.random()*100));
                //提交所有存入的数据
                editor.commit();

            }
        });

    }

}

在/data/data/com.hutao.sharedpreference/shared_prefs/有一个crazyit.xml文件。打开该XML文档可以看到文件内容:

<?xml version=‘1.0‘ encoding=‘utf-8‘ standalone=‘yes‘ ?>
<map>
<int name="random" value="30" />
<string name="time">2014年11月03月 03:29:23</string>
</map>

参考资料:

  《Android 疯狂讲义》

 

时间: 2024-09-20 12:00:08

Android 的数据存储——SharePreferences的相关文章

关于Android开发数据存储的方式(一)

关于Android开发数据存储方式(一) 在厦门做Android开发也有两个月了,快情人节了.我还在弄代码. 在微信平台上开发自己的APP,用到了数据存储的知识,如今总结一下: 整体的来讲.数据存储方式有三种:一个是文件,一个是数据库,还有一个则是网络. 当中文件和数据库可能用的稍多一些.文件用起来较为方便.程序能够自定义格式:数据库用起稍烦锁一些,但它有它的长处.比方在海量数据时性能优越.有查询功能,能够加密,能够加锁.能够跨应用.跨平台等等.网络,则用于比較重要的事情,比方科研,勘探,航空等

Android中数据存储(一)

国庆没有给国家添堵,没有勾搭妹子,乖乖的写着自己的博客..... 本文将为大家介绍Android中数据存储的五种方式,数据存储可是非常重要的知识哦. 一,文件存储数据 ①在ROM存储数据 关于在ROM读写文件,可以使用java中IO流来读写,但是谷歌很人性化,直接给你封装了一下,所以就有了Context提供的这两个方法:FileInputStream openFileInput(String name); FileOutputStream openFileOutput(String name,

Android之数据存储

概述 1.android中包含5中数据存储方式: SharedPreferences存储数据. ContentProvider存储 文件存储 SQLlite数据库存储 网络存储 Preference  File   DataBase 这三种方式分别对应的目录是: /data/data/Package Name/Shared_Pref /data/data/Package Name/files /data/data/Package Name/database 简单数据和配置信息,SharedPre

处女男学Android(十四)---Android 重量级数据存储之SQLite

前言 不知不觉的Android基础系列已经写了十三篇了,这是第十四篇~上一篇blog记录了Android中的一种数据存储方案,即共享参数(Sharedpreferences)的使用(处女男学Android(十三)---Android 轻量级数据存储之SharedPreferences).最近初学如何在Android中应用SQLite,写了一个基于ListView的增删查的小例子,本篇blog就记录一下我学习到的如何在Android中操作SQLite持久化客户端数据. 初始化SQLite 关于SQ

关于Android开发数据存储的四大方式

关于Android开发数据存储的四大方式 在厦门做Android开发也有两个月了,快情人节了,我还在弄代码.在微信平台上开发自己的APP,用到了数据存储的知识,现在总结一下: 总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式:数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等:网络,则用于比较重要的事情,比如科研,勘探,航空等实时

android 数据存储 SharePreferences 简单使用

SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个key-value(键值对).SharedPreferences常用来存储一些轻量级的数据. SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activity暂停时,将此activity的状态保存到SharedPereferences中:当Activity重载,系统回调方法onSave

处女男学Android(十三)---Android 轻量级数据存储之SharedPreferences

一.前言 转载请标明出处:http://blog.csdn.net/wlwlwlwl015/article/details/42437007 初学Android的时候在Activity之间传值我都是用Intent+Bundle这种模式去实现的,刚开始觉得没什么,后来渐渐发现了弊端,就是说只能逐层传递,当我的好几个Activity都需要从一个Activity中取数据的时候,这样就显得相当局限了,传来传去的即麻烦,又不合理,后来就想在Android中有没有web开发中类似于Session的东西,只要

【Android】数据存储-SharedPreferences存储

简单介绍:SharedPreferences是使用键值对的方式来存储数据的,也就是说,当保存一条数据的时候,给这条数据提供一个键,如果需要读取数据,只需要通过这个键就可以提取到对应的数据. 一:存储数据到SharePreferences中 Android提供的三种主要方法得到SharedPreferences() 1.Context里的getSharedPreferences()方法,该方法接收两个参数,第一个参数用于指定SharedPerferences的文件名(如果指定的文件不在则创建一个)

Android简易数据存储之SharedPreferences

Andorid提供了多种数据存储的方式,例如前面说到的“Android数据存储之SQLite的操作”是用于较复杂的数据存储.然而,如果有些简单的数据存储如果采用SQLite的方式的话会显得比较笨重.例如:记录用户是否访问过APP的欢迎页面之类的数据,如果采用SQLite的话会显得没必要而且费时费力.因此Andorid提供了另一种存储简单数据的方式SharedPreferences.SharedPreferences是一个轻量级的数据存储方式,其仅支持boolean.int.long.float.