如何使用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安全错误
数据库的锁怎样保障安全
网站服务器建设
淄川服装erp软件开发公司
用友取数工具连不上数据库
面试谈谈对软件开发的认识
惠州支付软件开发公司
如何接 软件开发项目
美国新型网络安全概念股
成都企能网络技术有限公司
北京美玲互联网科技有限公司
调查对网络安全自查报告
面试软件开发常见的面试问题
宁夏软件开发企业
加强网络安全教育图片
网络安全法 执法检查
可以容纳十万人的服务器
有关军事网络安全的
中天科技电缆行业工业互联网
供水网络安全工作部署
服务器升级后无法安装
2018年中国网络安全年会
软件开发计划.mpp
数据库文件的附加
世界各国网络安全实力
阿里云服务器连接手机热点
服务器在线状态检测
网络安全预判
郑州电脑软件开发价钱
服务器升级后无法安装
营造文明健康网络安全环境
数据库中需要描述哪些实体