All Projects → sevenshal → Oksharedprefs

sevenshal / Oksharedprefs

通过注解生成SharedPreferences包装类,解决跨进程数据访问不同步的问题。

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Oksharedprefs

Preferenceroom
🚚 Android processing library for managing SharedPreferences persistence efficiently and structurally.
Stars: ✭ 341 (+86.34%)
Mutual labels:  annotations, sharedpreferences
memo
Android processing and secured library for managing SharedPreferences as key-value elements efficiently and structurally.
Stars: ✭ 18 (-90.16%)
Mutual labels:  sharedpreferences, annotations
simple-preferences
Android Library to simplify SharedPreferences use with code generation.
Stars: ✭ 48 (-73.77%)
Mutual labels:  sharedpreferences, annotations
Kripton
A Java/Kotlin library for Android platform, to manage bean's persistence in SQLite, SharedPreferences, JSON, XML, Properties, Yaml, CBOR.
Stars: ✭ 110 (-39.89%)
Mutual labels:  annotations, sharedpreferences
Jmapper Core
Elegance, high performance and robustness all in one java bean mapper
Stars: ✭ 159 (-13.11%)
Mutual labels:  annotations
Php Annotations
Industrial-strength annotations for PHP
Stars: ✭ 131 (-28.42%)
Mutual labels:  annotations
Labeld
LabelD is a quick and easy-to-use image annotation tool, built for academics, data scientists, and software engineers to enable single track or distributed image tagging. LabelD supports both localized, in-image (multi-)tagging, as well as image categorization.
Stars: ✭ 129 (-29.51%)
Mutual labels:  annotations
Android Demos
Android develop demos
Stars: ✭ 126 (-31.15%)
Mutual labels:  annotations
Kau
An extensive collection of Kotlin Android Utils
Stars: ✭ 182 (-0.55%)
Mutual labels:  sharedpreferences
Ray.di
Guice style dependency injection framework for PHP
Stars: ✭ 175 (-4.37%)
Mutual labels:  annotations
Voc2coco
How to create custom COCO data set for object detection
Stars: ✭ 140 (-23.5%)
Mutual labels:  annotations
Dropwizard Jobs
Scheduling / Quartz integration for Dropwizard
Stars: ✭ 132 (-27.87%)
Mutual labels:  annotations
Beanutils
BeanUtils library is a Java bean copy utility with powerful functionality and high performance.
Stars: ✭ 164 (-10.38%)
Mutual labels:  annotations
Archivist
A full-stack publishing solution involving different technologies to power digital archives
Stars: ✭ 130 (-28.96%)
Mutual labels:  annotations
Ksprefs
🚀⚡ Kotlin SharedPreferences wrapper & cryptographic preferences android library.
Stars: ✭ 176 (-3.83%)
Mutual labels:  sharedpreferences
Dbpedia Spotlight Model
DBpedia Spotlight is a tool for automatically annotating mentions of DBpedia resources in text. Improving Efficiency and Accuracy in Multilingual Entity Extraction approach
Stars: ✭ 127 (-30.6%)
Mutual labels:  annotations
Cakephp Ide Helper
IDE Helper plugin for CakePHP
Stars: ✭ 138 (-24.59%)
Mutual labels:  annotations
React Native Default Preference
Use SharedPreference (Android) and UserDefaults (iOS) with React Native over a unified interface
Stars: ✭ 170 (-7.1%)
Mutual labels:  sharedpreferences
Easydeviceinfo
📱 [Android Library] Get device information in a super easy way.
Stars: ✭ 1,698 (+827.87%)
Mutual labels:  annotations
Bulldog
Android library to simplify reading and writing to SharedPreferences, never write code like this anymore prefs.edit().putString("someKey","someString").apply()
Stars: ✭ 133 (-27.32%)
Mutual labels:  sharedpreferences

oksharedpref

通过注解生成SharedPreferences实现的工具。解决安卓SharedPreferences多进程数据访问不一致的问题。

简介

  1. 让你告别手写包装代码管理SharedPreferences,通过注解的方式定义SharedPreferences包装类,使你可以方便的通过get/set方法操作SharedPreferences。
  2. 现在看来,安卓官方基本放弃了解决SharedPreferences跨进程访问不一致这一问题了,跨进程访问数据官方更加推荐ContentProvider。
  3. OkSharedPrefs将SharedPreferences和ContentProvider结合起来,让你使用SharedPreferences更加方便,并且通过ContentProvider交换数据,解决了跨进程数据访问不一致的问题。
  4. 底层仍然使用系统SharedPreferences实现,所以你的应用之前没有使用oksharedprefs,你可以很方便的移植,在新版本中加入这个库,已安装用户的原有数据不会有任何影响。

安装

allprojects {
		repositories {
			maven { url 'https://jitpack.io' }
		}
	}

dependencies {
    compile 'com.github.sevenshal.oksharedprefs:api:1.0.1'
    annotationProcessor 'com.github.sevenshal.oksharedprefs:processor:1.0.1'
}

用法

定一个interface类并且如下所示添加注解:

@SharedPreference(value = "Msg", implSharedPreference = false, preferenceName = "msg", multiProcess = false)
public interface IMsg {

    @DefaultValue(value = "null", createDefaultGetter = false)
    String USERID = "userId";

    @Type(PreferenceType.STRING_SET)
    @DefaultValue(value = "null", createDefaultGetter = false)
    String TOKEN = "token";

    @Type(PreferenceType.LONG)
    @DefaultValue(value = "0", createDefaultGetter = false)
    String DEVICE_ID = "deviceId";

    @Type(PreferenceType.BOOLEAN)
    @DefaultValue(value = "false", createDefaultGetter = false)
    String LOGIN = "hasAuth";

    String NICK_NAME = "nickName";

}

然后就可以直接使用生成的包装类了:

    MsgPrefs msgPrefs = MsgPrefs.defaultInstance(this);
    long deviceId = msgPrefs.getDeviceId();
    String userId = msgPrefs.getUserid();
    boolean login = msgPrefs.isLogin();
    String nickName= msgPrefs.getNickName("未命名");
    
    msgPrefs.prefs().registerOnSharedPreferenceChangeListener(this);

    Set set = new HashSet<String>();
    set.add("a");
    set.add("b");
    msgPrefs.edit().setDeviceId(111).setLogin(true).setUserid("userid").setToken(set).apply();

说明

生成的类的名称通过 @SharedPreference 的 value属性定义。生成的类名称为 value+Prefs,比如

@SharedPreference(value = "Msg") 将生成 MsgPrefs 类。

如果你不希望以Prefs结尾,可以通过preferencesSuffix属性修改。

@SharedPreference(value = "Msg", preferencesSuffix = "Preferences") 将生成 MsgPreferences类。

OkSharedPrefs生成的包装类默认实现了SharedPreferences接口, 这在key值通过变量方式存取时很方便,如果不希望生成的类实现SharedPreferences接口, 可以通过将 implSharedPreference 设置为 false,关闭该功能。此种情况下,可以通过生成的类的prefs()获取SharedPreferences接口实例。

默认的SharedPreferences文件名为default_preferences,你可以通过 preferenceName 修改。

默认生成的包装类不支持跨进程,但是可以通过将 multiProcess 设置为true打开该功能,默认关闭该功能是出于性能考虑,减少生成不必要的代码。

生成的包装类是单例模式的,因为安卓底层SharedPreferences也是全局单实例的,所以不会单例模式并不会带来性能问题。 考虑到在插件化系统中Context可能会做隔离的使用场景,你仍然可以通过 new MsgPrefs(context)的方式来使用。 甚至可以new MsgPrefs(context,name)来通过相同结构的包装类管理不同的属性文件,这对那种多用户数据管理的app很有用。

所有属性默认类型是String类型,通过为interface的属性添加 @Type(PreferenceType.LONG) 来修改类型。支持完整的SharedPreferences数据类型。

通过 @DefaultValue(value = "null", createDefaultGetter = false) 可以设置默认值,以及是否生成默认值取值方法。 createDefaultGetter的取值意义在于你是希望通过 msgPrefs.getNickName("自定义默认值") 还是 msgPrefs.getNickName() 获取数据。如果你在编码期间不确定默认值是什么,那需要将createDefaultGetter设为true。

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].