Hawk数据存储工具,使用超简单,可以替代SharePreference。
Hawk 是一个非常便捷的数据库 . 操作数据库只需一行代码 , 能存任何数据类型 .
github 地址: https://github.com/orhanobut/hawk
Hawk 是一个简单的 key-value 数据库
它使用: AES 加密,能选择使用SharedPreferences 或者 SQLite, Gson解析 (文章下方的Simple中有替换fastJson的版本)
提供:安全数据持久化,能存储任何类型
先看看例子 符合项目的需要之后往下看。存储例子:
Hawk.put("key", "something"); // Save string Hawk.put("key", true); // save boolean Hawk.put("key", new Foo()); // save an object Hawk.put("key", List<String>); // save list Hawk.put("key", List<Foo>); // save list Hawk.put("key", Map<Foo,Foo>); // save map Hawk.put("key", Set<Foo>); // save set Hawk.put("key", 1234); // save numbers
获取的例子:
String value = Hawk.get(key); int value = Hawk.get(key); Foo value = Hawk.get(key); boolean value = Hawk.get(key); List<String> value = Hawk.get(key); List<Foo> value = Hawk.get(key); Map<String,Foo> value = Hawk.get(key); Set<Foo> value = Hawk.get(key);
(一) 添加进项目
android studio 在gradle中进行配置
- repositories {
- // ...
- maven { url "https://jitpack.io" }
- }
- dependencies {
- compile 'com.github.orhanobut:hawk:1.21'
- }
(二) 初始化Hawk
初始化只需要一次就行了 放在你最开始执行的activity里面 或者 application
- Hawk.init(this)
- .setEncryptionMethod(HawkBuilder.EncryptionMethod.MEDIUM)
- .setStorage(HawkBuilder.newSqliteStorage(this))
- .setLogLevel(LogLevel.FULL)
- .build();
能使用高安全级别 初始化可能需要 36-400ms 并且需要你提供密码
- Hawk.init(this)
- .setEncryptionMethod(HawkBuilder.EncryptionMethod.HIGHEST)
- .setStorage(HawkBuilder.newSqliteStorage(this))
- .setLogLevel(LogLevel.FULL)
- .build();
初始化可以选择 SQLite 或者 SharePreference
- .setStorage(HawkBuilder.newSqliteStorage(this))
- .setStorage(HawkBuilder.newSharedPrefStorage(this))
(三) 存数据
- Hawk.put(key, T); // Returns the result as boolean
- // Returns the result as boolean
- Hawk.chain()
- .put(KEY_LIST, List<T>)
- .put(KEY_ANOTHER,"test")
- .commit();
(四) 取数据
- T result = Hawk.get(key);
当为null的时候设置 默认值
- T result = Hawk.get(key, T);
(五) 移除数据
- Hawk.remove(key); // Returns the result as boolean
同时移除多个
- Hawk.remove(KEY_LIST, KEY_NAME); // Returns the result as boolean
(六) 判断是否包含某个key
- boolean contains = Hawk.contains(key);
(七) 设置密码
- Hawk.init(this)
- .setEncryptionMethod(HawkBuilder.EncryptionMethod.HIGHEST)
- .setPassword("password")
- .setStorage(HawkBuilder.newSqliteStorage(this))
- .setLogLevel(LogLevel.FULL)
- .setCallback(new HawkBuilder.Callback() {
- @Override
- public void onSuccess() {
- }
- @Override
- public void onFail(Exception e) {
- }
- })
- .build();
(八) 注意事项
Hawk log 输出:
- Hawk.init(context,PASSWORD, LogLevel.FULL); // as default it is NONE
如果使用也请导入 如果不需要Rx的功能 移除掉相应源码不会有影响
混淆:
#Gson
-keep class com.google.gson.** { *; }
-keepattributes Signature
(最后) 遇到的问题
Hawk 使用Json 进行数据的存储
使用的是google提供的Gson库 , 但我的项目里已经有了FastJson
为了控制包的大小所以将Gson的解析替换为 FastJson 使用的eclipse编写的供大家参考
github 地址: https://github.com/orhanobut/hawk