亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

實現通用的SharedPreferences訪問接口

標簽:
Android

背景

在应用开发过程中,经常会用SharedPreferences存储配置参数、登陆状态等数据。直接使用系统提供的接口虽然能达到目的,但代码太啰嗦。本文目的是要实现一个优雅的SharedPreferences访问接口

目标

  1. 实现一组简单易用的访问接口

  2. 支持类型:String, Boolean, boolean, Integer, int, Long, long, Double, double

  3. 可以通过注解方式配置double类型精度

  4. 可以通过注解方式配置key,可以是资源文件

  5. 可以通过注解方式配置默认值,可以是资源文件

设计

接口定义

public interface PreferenceStorage<T> {    boolean isPersistence();    void save(@NonNull T model);    T load();    void clear();

}

Key注解

优先级: resId > key > fieldName

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)@Documentedpublic @interface Key {    String name() default "";    /**
     * default key from string resource
     *
     * @return R.string.xxx
     */
    int resId() default 0;

}

默认值注解

优先级: resId > value > defaultValue

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)@Documentedpublic @interface Default {    String value() default "";    /**
     * default value from string resource
     *
     * @return R.string.xxx
     */
    int resId() default 0;

}

非字符串字段会进行类型转换

精度注解

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)@Documentedpublic @interface Precision {    int scale() default 2;    RoundingMode roundingMode() default RoundingMode.HALF_UP;

}

用法

定义数据模型

模型用于跟存储数据建立一对一的映射关系

public class DataModel {    @Ignore
    private String ignored;    private String field1;    @Key("field_2")    @Default(resId = R.string.hello)    private String field2;    @Precision
    @Default("1.23")    private double field3;    private Double field4;    private Boolean field5;    private boolean field6;    private Integer field7;    private int field8;    private Long field9;    private long field10;
}

定义访问类型

参考抽象类

建议使用Application Context

访问数据

// 存储DataModel model1 = new DataModel();new DataStore(context).save(model1);// 加载DataModel model2 = new DataStore(context).load();// 清空new DataStore(context).clear();

实现



作者:核子飞弹
链接:https://www.jianshu.com/p/216e4fdb61ac


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消