Android的数据存储方式之一——SharedPreferences
来源:互联网 发布:最终幻想模型制作软件 编辑:程序博客网 时间:2024/05/17 18:28
Android存储方式有使用SharedPreferences存储数据;文件存储数据;SQLite数据库存储数据;使用ContentProvider存储数据;网络存储数据。
首先说明SharedPreferences存储方式,它是 Android提供的用来存储一些简单配置信息的一种机制,例如:登录用户的用户名与密码。其采用了Map数据结构来存储数据,以键值的方式存储,可以简单的读取与写入。SharedPreferences存储文件的目录是/data/data/Package Name/Shared_Pref,安卓手机root后可以查看。
1、得到SharedPreferences对象
2、调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor对象。
3、向SharedPreferences.Editor对象中添加数据。
4、调用commit方法将添加的数据提交。
public SharedPreferences getSharedPreferences(String name, int mode) { return mBase.getSharedPreferences(name, mode); }
name为本组件的配置文件名( 自己定义,也就是一个文件名)
mode为操作模式,默认的模式为0或MODE_PRIVATE,还可以使用MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE
mode指定为MODE_PRIVATE,则该配置文件只能被自己的应用程序访问。
mode指定为MODE_WORLD_READABLE,则该配置文件除了自己访问外还可以被其它应该程序读取。
mode指定为MODE_WORLD_WRITEABLE,则该配置文件除了自己访问外还可以被其它应该程序读取和写入
现在比较通用的是将SharePreferences的使用封装成一个工具类SPUtil,代码如下:
package com.ada.packageapplication;import android.content.Context;import android.content.SharedPreferences; import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Map;/** * Created by Ada on 2017/6/20. */public class SPUtil { private static String FILE_NAME="Ada_SharePreferences"; private SPUtil() { throw new Error("Do not need instantiate"); } /** *保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法 * @param context * @param key * @param value */ public static void saveData(Context context, String key, Object value) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor edit = sp.edit(); if(value instanceof Boolean) { edit.putBoolean(key, ((Boolean)value).booleanValue()); } else if(value instanceof String) { edit.putString(key, (String)value); } else if(value instanceof Integer) { edit.putInt(key, ((Integer)value).intValue()); } else if(value instanceof Float) { edit.putFloat(key, ((Float)value).floatValue()); } else if(value instanceof Long) { edit.putLong(key, ((Long)value).longValue()); } SP_Util.SharedPreferencesCompat.apply(edit); } /** * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值 * * @param context * @param key * @param defaultObject * @return */ public static Object getData(Context context, String key, Object defaultObject) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); if (defaultObject instanceof String) { return sp.getString(key, (String) defaultObject); } else if (defaultObject instanceof Integer) { return sp.getInt(key, (Integer) defaultObject); } else if (defaultObject instanceof Boolean) { return sp.getBoolean(key, (Boolean) defaultObject); } else if (defaultObject instanceof Float) { return sp.getFloat(key, (Float) defaultObject); } else if (defaultObject instanceof Long) { return sp.getLong(key, (Long) defaultObject); } return null; } /** * 移除某个key值已经对应的值 * @param context * @param key */ public static void removeData(Context context, String key) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor edit = sp.edit(); edit.remove(key); SP_Util.SharedPreferencesCompat.apply(edit); } /** * 清除所有数据 * @param context */ public static void clearData(Context context) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor edit = sp.edit(); edit.clear(); SP_Util.SharedPreferencesCompat.apply(edit); } /** * 查询某个key是否已经存在 * @param context * @param key * @return */ public static boolean containsData(Context context, String key) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); return sp.contains(key); } /** * 返回所有的键值对 * * @param context * @return */ public static Map<String, ?> getAll(Context context) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); return sp.getAll(); } /** * 创建一个解决SharedPreferencesCompat.apply方法的一个兼容类 * * @author zhy * */ private static class SharedPreferencesCompat { private static final Method mApplyMethod = findApplyMethod(); private SharedPreferencesCompat() { } private static Method findApplyMethod() { try { Class e = SharedPreferences.Editor.class; return e.getMethod("apply", new Class[0]); } catch (Exception var1) { var1.printStackTrace(); return null; } } public static void apply(SharedPreferences.Editor editor) { try { if(mApplyMethod != null) { mApplyMethod.invoke(editor, new Object[0]); return; } } catch (IllegalAccessException var2) { var2.printStackTrace(); } catch (InvocationTargetException var3) { var3.printStackTrace(); } editor.commit(); } }}
使用时直接调用SPUtil进行数据的存储和读取
SPUtil.saveData(this,"isRemember",cbxRemember.isChecked());SPUtil.saveData(this,"userName",userName);SPUtil.saveData(this,"password",password);boolean isRemember= (boolean) SPUtil.getData(this,"isRemember",false);String userName= (String) SPUtil.getData(this,"userName","");String password= (String) SPUtil.getData(this,"password","");使用场景:记住密码,代码https://github.com/adadong/SharedPreferencesDemo.git
其他参考链接http://blog.csdn.net/crazy__chen/article/details/47026845
- Android的数据存储方式之一——SharedPreferences
- android数据存储方式之一 Sharedpreferences
- Android——SharedPreferences存储数据方式
- Android数据的存储方式SharedPreferences
- Android 关于数据存储的小案例——SharedPreferences存储方式
- 关于Android数据存储方式(一)——SharedPreferences
- Android的数据存储方式-------使用SharedPreferences存储数据
- Android中数据存储之一------SharedPreferences
- Android学习 —— 数据的存储与访问方式二: SharedPreferences(偏好参数保存)
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File —— SharePreferences
- Android的数据存储——存储键值对,SharedPreferences
- Android数据存储——SharedPreferences存储
- Android 数据存储的一种最简单的方式 SharedPreferences
- Android—android的SharedPreferences存储数据实例
- Android数据的四种存储方式SharedPreferences、SQLite、ContenProvider
- Android数据的四种存储方式之SharedPreferences
- Android数据的存储方式(1)SharedPreferences
- Android数据的四种存储方式之------SharedPreferences
- 三种经典iPhone上网络抓包方法详解
- databinding使用include
- 程序员为什么要写周报?
- 弃农药坑回归编程之路
- 【Java并发编程】Thread方式创建线程
- Android的数据存储方式之一——SharedPreferences
- iOS 录制屏幕
- 字节大小端
- python中报错ValueError: invalid \x escape
- [Sonatype Nexus]Ubuntu、Nexus搭建Maven私有仓库
- mysql 修改字符集编码为utf8mb4
- 给JAVA初学者的50个忠告
- Shell编程-awk
- 概率密度估计