Android入门——数据存储之SharedPreferences详解与应用

来源:互联网 发布:单片机串口通信原理 编辑:程序博客网 时间:2024/05/21 15:02

引言

很多时候,我们在应用程序开发过程中常常会需要保存一些少量的数据,而且格式也不复杂,都是些简单的字符串、布尔值、简单集合等,比如说应用程序的配置信息、游戏中玩家的积分等,正是基于此SharedPreferences应运而生。

一、SharedPreferences概述

SharedPreferences是一个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的 getSharedPreferences(String, int)来获取对应的实例,它主要负责读取应用程序Preferences数据,而SharedPreferences自身并没有直接操作数据的能力而是通过调用edit()方法来先得到SharedPreferences.Editor对象,进而实现对数据的编辑和删除,再由系统封装成键值对的xml文件保存在../data/data/app packagename/shared_prefs/xxx.xml。并且对于任何特定设置的首选项,所有的客户端共享的单个实例。修改首选项必须经过一个SharedPreferences.Editor对象,以确保优先值保持一致的状态和控制。

二、SharedPreferences源码

public interface SharedPreferences {    public interface OnSharedPreferenceChangeListener {        void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key);    }    public interface Editor {        Editor putString(String key, @Nullable String value);        Editor putStringSet(String key, @Nullable Set<String> values);        Editor putInt(String key, int value);        Editor putLong(String key, long value);        Editor putFloat(String key, float value);        Editor putBoolean(String key, boolean value);        Editor remove(String key);        Editor clear();        boolean commit();        void apply();    }    Map<String, ?> getAll();//获取所有的键值对    @Nullable    String getString(String key, @Nullable String defValue);    @Nullable    Set<String> getStringSet(String key, @Nullable Set<String> defValues);//获取set    int getInt(String key, int defValue);    long getLong(String key, long defValue);    float getFloat(String key, float defValue);    boolean getBoolean(String key, boolean defValue);//获取存储的布尔值    boolean contains(String key);//检查是否包含指定key    Editor edit();//返回Editor对象    void registerOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener);//onChange监听注册    void unregisterOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener);//取消OnChange监听}

三、SharedPreferences的应用

1、创建SharedPreferences实例

创建SharedPreferences实例分为两种情况:第一种创建当前应用的,只能通过Context的getSharedPreferences(String name, int mode);第二种创建其他应用的,这两种都是需要调用同一方法,其中第二个参数mode为参数,有四种取值

  • MODE_PRIVATE 只能被当前应用读取
  • MODE_WORLD_READABLE 可被其他应用读但不能写
  • MODE_WORLD_WRITEABLE 可被其他应用读写
  • MODE_MULTI_PROCESS 支持多线程

1.1、创建当前应用的SharedPreferences实例

直接使用当前的上下文Context对象来调用getSharedPreferences

SharedPreferences sharedPreferences=getSharedPreferences("filename",MODE_PRIVATE);

1.2、创建第三方应用的SharedPreferences实例

与创建自身的实例不同的是,我们需要先得到第三方应用的上下文对象,再去调用。

Context context=createPackageContext("packgename",CONTEXT_IGNORE_SECURITY);sharedPreferences=context.getSharedPreferences("filename",MODE_WORLD_WRITEABLE);

2、管理SharedPreferences

上面已经讲过SharedPreferences的实例是不能直接管理操作数据的,一切数据操作都是要由SharedPreferences.Editor来完成,所以管理SharedPreferences需要三步。

2.1、得到SharedPreferences.Editor管理对象

SharedPreferences.Editor editor=sharedPreferences.edit();

2.2、通过SharedPreferences.Editor对象来调用数据操作方法

值得注意的是Editor并没有提供对应的update名称的方法,因为当我们put操作的时候,他会自动帮我们判断,如果没有这个key则新建键值对,如果已经存在则覆盖旧值。

  • SharedPreferences.Editor putBoolean(String key, boolean value)
  • SharedPreferences.Editor putFloat(String key, float value)
  • SharedPreferences.Editor putInt(String key, int value)
  • SharedPreferences.Editor putLong(String key, long value)
  • SharedPreferences.Editor putString(String key, String value)
  • SharedPreferences.Editor putStringSet(String key, Set values)
  • SharedPreferences.Editor remove(String key)
  • SharedPreferences.Editor clear()

2.3、commit提交数据操作

执行了一系列操作后,要想保存操作的结果一定不要忘了commit,有点像数据库的事务操作。

editor.commit();//提交修改

3、访问SharedPreferences

这个SharedPreferences的设计机制真的蛮有意思,访问和操作使用的不是同一个对象,操作借助SharedPreferences.Editor,而访问则是使用SharedPreferences实例来调用相关方法,所以只要我们获取到相应的SharedPreferences实例即可。

  • Map<String, ?> getAll()
  • boolean getBoolean(String key, boolean defValue)
  • float getFloat(String key, float defValue)
  • int getInt(String key, int defValue)
  • long getLong(String key, long defValue)
  • String getString(String key, String defValue)
  • Set<String> getStringSet(String key, Set defValues)

4、SharedPreferences的简单应用

public class MainActivity extends Activity {    private SharedPreferences sharedPreferences;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    public void readPrefs(View v ){        if (sharedPreferences!=null){            int no=sharedPreferences.getInt("no",-1);            String name=sharedPreferences.getString("name", "cmo");            Toast.makeText(MainActivity.this,no+name,Toast.LENGTH_LONG).show();        }    }    public void writePrefs(View v){        sharedPreferences=getSharedPreferences(getPackageName()+"prefs",MODE_PRIVATE);        SharedPreferences.Editor editor=sharedPreferences.edit();        editor.putInt("no",99);        editor.putString("name", "CrazyMO");        editor.commit();    }}

这里写图片描述

0 0
原创粉丝点击