KO
|
EN
gitlite — search
Search
#python
#java
#python3
#arduino
#golang
#machine-learning
#rust
#html
#flask
#javascript
#seismology
#nodejs
ElegantData
★ 18
Open GitHub ↗
像操作Room一样操作 SharedPreferences 和 File 文件.
Download README (.md)
Explore Similar Repositories
xxl-job-java-api
:
基于xxl-job扩展的JavaAPI。主要是为了可以脱离控制台,在项目中使用API动态管理调度任务。
jms
:
A configurable CMS based on JSON schema specification
opti-image
:
A Vue.js component for handling performant images without the headache. (lazy loading, webp, etc)
linux-hotpatch
:
Linux热补丁实践
DevMatch
:
Find teammates for your next hackathon, smart and easy
// repository documentation
Was this content helpful?
★ 0
(0 ratings)
Select Rating:
★
★
★
★
★
Submit Feedback
Recent Feedback
×
Download README
Do you want to download the
README.md
file for
ElegantData
?
Download (.md)
# ElegantData 像操作Room一样操作 SharedPreferences 和 File 文件. [  ](http://developer.android.com/index.html) [  ](https://bintray.com/lizixian/ElegantData/code/_latestVersion) [  ](http://choosealicense.com/licenses/mit/) ## 相关文章 [掘金](https://juejin.im/post/5cf8d8faf265da1ba9156dc8) ## 依赖 ```groovy dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.lzx.elegantData:code:1.0.0' annotationProcessor 'com.lzx.elegantData:compiler:1.0.0' } repositories { google() jcenter() maven { url "https://dl.bintray.com/lizixian/ElegantData" } } ``` ## 使用方法 #### 一、创建一个接口: ```java @ElegantEntity(fileName = "UserInfo_Preferences") public interface SharedPreferencesInfo extends ISharedPreferencesInfoDao { String keyUserName = ""; } //或者 @ElegantEntity(fileName = "CacheFile.txt", fileType = ElegantEntity.TYPE_FILE) public interface FileCacheInfo extends IFileCacheInfoDao { int keyPassword = 0; } ``` 加上@ElegantEntity注解,并且定义 fileName 文件名,fileType 文件类型,fileType 默认为 SharedPreferences 文件。 #### 二、定义一个抽象类继承 ElegantDataBase ```java @ElegantDataMark public abstract class AppDataBase extends ElegantDataBase { public abstract SharedPreferencesInfo getSharedPreferencesInfo(); public abstract FileCacheInfo getFileCacheInfo(); } ``` 让这个类加上 @ElegantDataMark 注解,并且定义在第一步中定义的接口的抽象方法。 然后后 ReBuild 一下,这时候会 build 报错,这时候会生成一个 IXXXDao 接口,然后让你的接口继承它,如上第一步所示。 #### 三、使用单例模式去构建 ```java @ElegantDataMark public abstract class AppDataBase extends ElegantDataBase { public abstract SharedPreferencesInfo getSharedPreferencesInfo(); public abstract FileCacheInfo getFileCacheInfo(); private static AppDataBase spInstance; private static AppDataBase fileInstance; private static final Object sLock = new Object(); //使用SP文件 public static AppDataBase withSp() { synchronized (sLock) { if (spInstance == null) { spInstance = ElegantData .preferenceBuilder(ElegantApplication.getContext(), AppDataBase.class) .build(); } return spInstance; } } //使用File文件 public static AppDataBase withFile() { synchronized (sLock) { if (fileInstance == null) { String path = Environment.getExternalStorageDirectory() + "/ElegantFolder"; fileInstance = ElegantData .fileBuilder(ElegantApplication.getContext(), path, AppDataBase.class) .build(); } return fileInstance; } } } ``` 如果使用 SP 文件,调用 ElegantData#preferenceBuilder 方法去构建实例。 如果是 File 文件,则使用 ElegantData#fileBuilder 去构建。 两个方法都需要传入上下文和 AppDataBase 的 class。唯一不一样的是使用 File 文件需要先创建文件夹,所以在第二个参数传入的是创建文件夹的路径。 #### 四、使用 经过上面三个步骤后,ReBuild 一下,然后就可以开始使用了。 ```java //使用 SP 文件存入数据 AppDataBase.withSp().getSharedPreferencesInfo().putKeyUserName("小明"); //使用 File 文件存入数据 AppDataBase.withFile().getFileCacheInfo().putKeyPassword(123456789); String userName = AppDataBase.withSp().getSharedPreferencesInfo().getKeyUserName(); Log.i("MainActivity", "userName = " + userName); int password = AppDataBase.withFile().getFileCacheInfo().getKeyPassword(); Log.i("MainActivity", "password = " + password); ``` ## @IgnoreField 被 @IgnoreField 注解标记的字段,将不会被解析: ```java @ElegantEntity(fileName = "UserInfo_Preferences") public interface SharedPreferencesInfo extends ISharedPreferencesInfoDao { String keyUserName = ""; @IgnoreField int keyUserSex = 0; } ``` Rebuild 后,keyUserSex 会被忽略,相关字段的方法不会被生成。 ## @NameField 被 @NameField 注解标记的字段,可以重命名: ```java @ElegantEntity(fileName = "UserInfo_Preferences") public interface SharedPreferencesInfo extends ISharedPreferencesInfoDao { String keyUserName = ""; @NameField(value = "sex") int keyUserSex = 0; } ``` 字段 keyUserSex 解析后生成的 put 和 get 方法是 putSex 和 getSex , 而不是 putUserSex 和 getUserSex。 ## @EntityClass @EntityClass 注解用来标注实体类,如果你需要往文件中存入实体类,那么需要加上这个注解,否则会出错。 ```java @ElegantEntity(fileName = "UserInfo_Preferences") public interface SharedPreferencesInfo extends ISharedPreferencesInfoDao { String keyUserName = ""; @EntityClass(value = SimpleJsonParser.class) User user = null; } ``` 如上所示,@EntityClass 注解需要传入一个 json 解析器,存入实体类的原理是把实体类通过解析器变成 json 字符串存入文件,取出来的时候 通过解析器解析 json 字符串变成实体类。 ```java public class SimpleJsonParser extends JsonParser<User> { private Gson mGson; public SimpleJsonParser(Class<User> clazz) { super(clazz); mGson = new Gson(); } @Override public String convertObject(User object) { return mGson.toJson(object); } @Override public User onParse(@NonNull String json) { return mGson.fromJson(json, User.class); } } ``` json 解析器需要实现两个方法,convertObject 方法作用是把实体类变成 json 字符串,onParse 方法作用是把 json 字符串变成 实体类。