文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何使用SharedPreferences在Android存储对象

2023-06-25 12:35

关注

这篇文章给大家介绍如何使用SharedPreferences在Android存储对象,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

为什么不用SQLite? 原因多种:除了面向对象和关系数据库之间的阻抗不匹配时,SQLite可能是矫枉过正(带来了更多的开销)对于一些简单的用例,或者其用法和语句可能会完全不喜欢。其他Android ORM 框架(ORMLite, greenDAO, Sugar ORM, ActiveAndroid, 等)或NOSQL移动数据库,如Couchbase精简版(Beta版在此时间)。 Couchbase精简版基本上是一个JSON数据库,它们旨在降低复杂性,但是同时又违背了抽象漏洞定律(所有不证自明的抽象都是有漏洞的)

 代码如下:

public class UserPrefs{        private static final String PREFS_NAME = "com.our.package.UserPrefs";         private static SharedPreferences settings;      private static SharedPreferences.Editor editor;       public UserPrefs(Context ctx){        if(settings == null){           settings = ctx.getSharedPreferences(PREFS_NAME,                                               Context.MODE_PRIVATE );        }               editor = settings.edit();       }   //...}

其中User代码如下:

public class User{    private int id; // used for object storage    private String userName;    private boolean registered;    private double score;        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操作如下:

 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";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();}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);}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() 给我们每个用户每个字段的唯一标识。

public static final String KEY_PREFIX =            "com.our.package.KEY";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存储对象就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯