Skip to content
This repository has been archived by the owner on Dec 8, 2022. It is now read-only.
/ SharePreferences Public archive

使用注解生成 操作SharePreferences 代码 方便操作 put get 操作 不用再去重复写各种put get 操作 直接一行注解搞定

Notifications You must be signed in to change notification settings

Alaske/SharePreferences

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SharePreferencesUtil

  • 主要为了减少sharePreferences操作的繁琐性 使用SharePreferencesUtil之后所有的put get 操作只需要一个注解搞定 确实不行那就两个
  • 核心实现 利用android AbstractProcessor (注解解析器)生成操作sharePreferences代码

注解类介绍

@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE)
public @interface SPData {

    String name() default "sp_data";

    int mode();
}

SPData主要生成SharePreferencesUtil对象,注意SPData 只能存在一个 多个util会直接忽略

@Retention(RetentionPolicy.CLASS)
@Target({ElementType.FIELD, ElementType.TYPE})
public @interface SPItem {


    String key() default "";

    Class valueType() default String.class;


    Class<? extends ISPConvert> convert() default DefaultGsonConvert.class;
}
· ·
key 对应SP中 put get 中的 Key 值(如果注解定义在变量中不写key 默认值为变量名称 如果定义在class中不写默认为className)
valueType 此字段主要为了不想定义变量的一些put set操作 直接指定put set 的类型 类型可以是object 这边默认会转成json string存入sp中
convert 可自定义数据类型转换成sp所需要的String即可 具体参考DefaultGsonConvert

simple

  • 注解代码
/**
 * Created by zhaocheng on 2018/4/28.
 */

@SPData(mode = Context.MODE_PRIVATE)
public class TestApi {
    @SPItem
    private String userData;

    @SPItem(convert = DefaultGsonConvert.class)
    public static class UserMo {
        private String id;
        private String name;

    }

}
  • 对应生成代码
public class SharePreferencesUtil {
  private static Context mContext;

  private SharePreferencesUtil() {
  }

  SharedPreferences getSharedPreferences() {
    return mContext.getSharedPreferences("sp_data",0);
  }

  public static void init(Context context) {
    mContext = context.getApplicationContext();
  }

  public static SharePreferencesUtil getInstance() {
    return SharePreferencesHolder.holder;
  }

  public void setUserMo(TestApi.UserMo param) {
    getSharedPreferences().edit().putString("UserMo",new DefaultGsonConvert().convertToObject(param));
  }

  public TestApi.UserMo getUserMo() {
    String data= getSharedPreferences().getString("UserMo","");
    return new DefaultGsonConvert<TestApi.UserMo>().unConvertData(data,TestApi.UserMo.class);
  }

  public void setUserData(String userData) {
    getSharedPreferences().edit().putString("userData",userData).apply();
  }

  public String getUserData() {
    return getSharedPreferences().getString("userData","");
  }

  static class SharePreferencesHolder {
    static final SharePreferencesUtil holder = new SharePreferencesUtil();
  }
}
  • 自定义key 以及数据类型
@SPItem(key = "token",valueType = String.class)
public class TestApi {
    private String userData;

}
  • 对应生成util类
@SuppressWarnings("unchecked")
public class SharePreferencesUtil {
  private static Context mContext;

  private SharePreferencesUtil() {
  }

  SharedPreferences getSharedPreferences() {
    return mContext.getSharedPreferences("sp_data",0);
  }

  public static void init(Context context) {
    mContext = context.getApplicationContext();
  }

  public static SharePreferencesUtil getInstance() {
    return SharePreferencesHolder.holder;
  }

  public void setToken(String token) {
    getSharedPreferences().edit().putString("token",token).apply();
  }

  public String getToken() {
    return getSharedPreferences().getString("token","");
  }

  static class SharePreferencesHolder {
    static final SharePreferencesUtil holder = new SharePreferencesUtil();
  }
}

使用方式

        //初始化一次即可
        SharePreferencesUtil.init(this);


        //set操作
        SharePreferencesUtil.getInstance().setToken("test token");

        //get 操作
        String token = SharePreferencesUtil.getInstance().getToken();
        

About

使用注解生成 操作SharePreferences 代码 方便操作 put get 操作 不用再去重复写各种put get 操作 直接一行注解搞定

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages