如何使用SharedPreferences在Android存储对象
发表于:2024-11-15 作者:千家信息网编辑
千家信息网最后更新 2024年11月15日,这篇文章给大家介绍如何使用SharedPreferences在Android存储对象,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。为什么不用SQLite? 原因多种:除了面向对象
千家信息网最后更新 2024年11月15日如何使用SharedPreferences在Android存储对象Gson
这篇文章给大家介绍如何使用SharedPreferences在Android存储对象,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
为什么不用SQLite
? 原因多种:除了面向对象和关系数据库之间的阻抗不匹配时,SQLite可能是矫枉过正(带来了更多的开销)对于一些简单的用例,或者其用法和语句可能会完全不喜欢。其他Android ORM
框架(ORMLite, greenDAO, Sugar ORM, ActiveAndroid, 等)或NOSQL
移动数据库,如Couchbase
精简版(Beta版在此时间)。 Couchbase精简版基本上是一个JSON数据库,它们旨在降低复杂性,但是同时又违背了抽象漏洞定律(所有不证自明的抽象都是有漏洞的)
代码如下:
/** stores the user object in SharedPreferences */public class UserPrefs{ /** This application's preferences label */ private static final String PREFS_NAME = "com.our.package.UserPrefs"; /** This application's preferences */ private static SharedPreferences settings; /** This application's settings editor*/ private static SharedPreferences.Editor editor; /** Constructor takes an android.content.Context argument*/ public UserPrefs(Context ctx){ if(settings == null){ settings = ctx.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE ); } /* * Get a SharedPreferences editor instance. * SharedPreferences ensures that updates are atomic * and non-concurrent */ editor = settings.edit(); } //...}
其中User代码如下:
/** User object to be saved in db */public class User{ private int id; // used for object storage private String userName; private boolean registered; private double score; /** Constructor */ public User(int id, String userName, boolean registered, double score){ this.id = id; this.userName = userName; this.registered = registered; this.score = score; } // getters and setters here...}
将SharedPreferences
看成一个Map存储,
CRUD操作如下:
/** generic field keys */ private static final String KEY_USERNAME = "com.our.package.KEY_USERNAME"; private static final String KEY_REGISTERED = "com.our.package.KEY_REGISTERED"; private static final String KEY_SCORE = "com.our.package.KEY_SCORE";/** Store or Update */public void setUser(User user){ if(user == null) return; // don't bother int id = user.getId(); editor.putString( getFieldKey(id, KEY_USERNAME), user.getUsername() ); editor.putBoolean( getFieldKey(id, KEY_REGISTERED), user.isRegistered() ); editor.putFloat( getFieldKey(id, KEY_SCORE), user.getScore() ); editor.commit();}/** Retrieve */public User getUser(int id){ String name = settings.getString( getFieldKey(id, KEY_USERNAME), "" ); // default value boolean registered = settings.getBoolean( getFieldKey(id, KEY_REGISTERED), false); // default value double score = settings.getFloat( getFieldKey(id, KEY_SCORE), 0); // default value return new User(id, name, registered, score);}/** Delete */public void deleteUser(User user){ if(user == null) return; // don't bother int id = user.getId(); editor.remove( getFieldKey(id, KEY_USERNAME) ); editor.remove( getFieldKey(id, KEY_REGISTERED) ); editor.remove( getFieldKey(id, KEY_SCORE) ); editor.commit();}
主键是通过getFieldKey
方法, getFieldKey()
给我们每个用户每个字段的唯一标识。
/** The prefix for flattened user keys */public static final String KEY_PREFIX = "com.our.package.KEY";/** Method to return a unique key for any field belonging to a given object* @param id of the object* @param fieldKey of a particular field belonging to that object* @return key String uniquely identifying the object's field*/private String getFieldKey(int id, String fieldKey) { return KEY_PREFIX + id + "_" + fieldKey;}
客户端调用如下:
// get a SharedPreferences instanceUserPrefs prefs = new UserPrefs( this.getApplicationContext() );// get id from server or local storage// then find User with that idUser user = prefs.getUser(id);// operations on User, e.g.user.setRegistered(true);user.setScore(new_score);// saveprefs.setUser(user);// ...or deleteprefs.deleteUser(user),
Gson
Gson
是一个Java
库,它提供了简单的toJSON()
和fromJson()
方法来转换Java
对象到JSON
格式,反之亦然。我们可以简单地存储JSON
格式整个字符串到SharedPreferences
:
// convert User object user to JSON formatGson gson = new Gson();String user_json = gson.toJson(user);// store in SharedPreferencesString id = "" + user.getId(); // get storage keyeditor.putString(id, user_json);editor.commit();// time flies...// do the reverse operationuser_json = settings.getString(id, "");user = gson.fromJson(user_json, User.class);
关于如何使用SharedPreferences在Android存储对象就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
对象
存储
数据
数据库
更多
代码
内容
方法
格式
漏洞
精简版
帮助
不错
复杂
矫枉过正
不用
之间
兴趣
原因
反之亦然
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
木头人大话西游数据库密码
游戏软件开发完成
数据库出现错误
数据库创建区域经理表
请检查数据库服务是否开启
想写一个关于网络技术的网页
数据库本地新建默认密码
查询当前数据库用户
阿里云如何升级数据库
q绑查询在线数据库
网络安全教育主题视频藏语
河北麻将软件开发性价比出众
淘宝商品发布与管理软件开发
网络安全记心间日记
公安网络安全设备购置
郑州蓝盾网络技术有限公司
内网网络安全防护类平台有哪些
数据库常用结构
服务器安数据安全
如何查询网络安全等级保护
成都软件开发培训机构招生技巧
文献中怎么引用tcmsp数据库
分布式应用数据库锁
登入链接服务器出问题
探针数据库
服务器FO开头的叫什么
dell服务器硬盘两个指示灯
数据库设置表之间的关系
富顺两校网络技术是什么
新的手抄报网络安全