如何使用SharedPreferences在Android存储对象
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章给大家介绍如何使用SharedPreferences在Android存储对象,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。为什么不用SQLite? 原因多种:除了面向对象
千家信息网最后更新 2026年11月01日如何使用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安全错误
数据库的锁怎样保障安全
花魁咖啡
互联网科技
互联网金融科技
互联网科技股
湖北九亚互联网络科技有限公司
重生之互联网科技帝国
互联网科技作文
现代互联网科技股
河南住房之家互联网科技
内蒙古九一互联网科技
企晟互联网信息科技有限公司
晋城互联网科技
明优互联网科技有限公司
合肥互联网科技公司公章图片
上海钢联属于互联网科技股吗
版纳互联网科技选哪家
北京天晋互联网科技有限公司
杭州融税互联网科技有限公司
互联网大会出现的黑科技
互联网科技快速发展优美句子
互联网的科技创新
互联网科技公司官网
腾讯科技 互联网女皇
科技互联网创业计划书
常德市电业局互联网科技部
移动互联网科技股
中国科技创新与世界互联网大会
互联网科技大赛获奖感言
网互联网络科技
互联网大会出现的黑科技