android -------- Hawk数据库
Hawk 是一个非常便捷的数据库 . 操作数据库只需一行代码 , 能存任何数据类型 .
github 地址: https://github.com/orhanobut/hawk
一、概念
SharedPreferences的使用大家应该非常熟悉啦。这是一种轻量级的存储简单配置信息的存储机制,以key-value的形式保存数据。
这里介绍一款基于SharedPreferences的的存储框架,是由Android开发大神Orhan Obut开源维护的,
它使用:
AES 加密
能选择使用SharedPreferences 或者 SQLite
Gson解析 (文章下方的Simple中有替换fastJson的版本)
提供:
安全数据持久化
能存储任何类型
二、用法
添加依赖
compile "com.orhanobut:hawk:2.0.1"
初始化
Hawk.init(context).build();
存储数据
//基本数据类型
Hawk.put("position","zz"); //集合
List<String> list = new ArrayList<>();
list.add("zhangqie1");
list.add("zhangqie2");
Hawk.put("listzq",list); //类
User user= new User();
user.setId(1);
user.setName("zhangqie1");
Hawk.put("user",user); //集合+实体类
User user1= new User();
user1.setId(2);
user1.setName("zhangqie2");
List<User> listUser = new ArrayList<>();
listUser.add(user);
listUser.add(user1);
Hawk.put("listUser",listUser);
读取数据(去上面最后一个数据)
List<User> listU1 = Hawk.get("listUser");
数据是否已经保存:
Hawk.contains(key);
删除数据:
Hawk.delete(key);
删除全部数据:
Hawk.deleteAll();
接下来从源码的角度来看看内部干了什么吧,看图

这张图也很清晰的帮我们做了简单分析。左边的PUT方法中,是把T value 存储到Disk当中。大致流程是,先将数据进行toString的转换,接下来是加密,然后进行序列化,最后是存储,用的就是SharePreference的存储。获取数据时就正好逆过来啦。
android -------- Hawk数据库的更多相关文章
- Android Hawk数据库 github开源项目
Android Hawk数据库 github开源项目 Hawk 是一个很便捷的数据库 . 操作数据库仅仅需一行代码 , 能存不论什么数据类型 . github 地址: https://github. ...
- Android Sqlite 数据库版本更新
Android Sqlite 数据库版本更新 http://87426628.blog.163.com/blog/static/6069361820131069485844/ 1.自己写一个类继承 ...
- Android开发数据库三层应用-DataSnap
Android开发数据库三层应用-DataSnap http://www.2ccc.com/news/Html/?1517.html 核心提示:我觉得Delphi最强大的的功能之一就是开发数据库三层应 ...
- Android SQLite 数据库详细介绍
Android SQLite 数据库详细介绍 我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用 ...
- 玩转Android之数据库框架greenDAO3.0使用指南
用过ActiveAndroid.玩过ORMLite,穿过千山万水,最终还是发现greenDAO好用,ActiveAndroid我之前有一篇文章介绍过 玩转Android之数据库框架ActiveAndr ...
- Android sqlite数据库存取图片信息
Android sqlite数据库存取图片信息 存储图片:bitmap private byte[] getIconData(Bitmap bitmap){ int size = bitmap.get ...
- Android中数据库的操作流程详解
Android中数据库的操作方法: 1.Android平台提供了一个数据库辅助类来创建或打开数据库. 这个辅助类继承自SQLiteOpenHelper类.继承和扩展SQLiteOpenHelper类主 ...
- Android SQLite 数据库 增删改查操作
Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...
- 图解IntelliJ IDEA 13版本对Android SQLite数据库的支持
IntelliJ IDEA 13版本的重要构建之一是支持Android程序开发.当然对Android SQLite数据库的支持也就成为了Android开发者对IntelliJ IDEA 13版本的绝对 ...
随机推荐
- GET和POST两种基本请求方法(转自博主--在途中#)
GET和POST两种基本请求方法的区别 GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过req ...
- LNMP分离式部署
#### LNMP组合工作流程 在LNMP组合工作时,首先是用户通过浏览器输入域名请求Nginx Web服务,如果请求是静态资源,则由Nginx解析返回给用户:如果是动态请求(.php结尾),那么Ng ...
- SQL实现如何计算项目进度总共天数情况、已经施工天数情况、以及施工进度百分比
SELECT DATEDIFF(DAY,e.StartDate,e.EndDate)as totaldays, (SELECT COUNT(TaskID) from ConstructionManag ...
- Python中__init__()和self的有啥用
这篇博客让我一下子就理解了,https://www.cnblogs.com/illusion1010/p/9527034.html,感谢博主 由于类可以起到模板的作用,因此,可以在创建实例的时候,把一 ...
- js let
<script> var a; // 变量提升 js中的作用域只有在函数中 {} 才称为作用域 if/for循环都不是 都会产生变量提升 console.log(a); { a = 2; ...
- java 实现hex文件转换bin保存至内存中
hex 文件的格式,以文件中某一行字符串(16进制)为例: :10 0830 00 020C5D0224B3FFFFFFFFFFFFFFFFFFFF 7E 10,长度,转换成10进制,也就是16B 大 ...
- 练手——用Python写的时间戳转换为北京时间的小工具
#北京时间需加上8小时bj = 8*3600 def time_stamp(times): #一天总秒数 nonDaySeconds = 24*3600 leapmonths = [ ...
- MySQL 压缩文件安装遇到的问题及解决方案
第一步:从官网下载压缩文件(链接). 第二步:解压该文件,放置到想放到的位置.我的目录是在 C:\mysql\mysql-8.0.12-winx64 下. 第三步:在C:\mysql\mysql-8. ...
- Python母版使用
设定base.html为母版,母版是页面的公共部分,可以减少代码冗余: 母版中变化的部分用: {% block page-main % } <!--page-mains是自己起的名称--&g ...
- 初涉wheel 组
入门 在一次处理su切换的问的时候出现一个问题, [cheng1@localhost ~]$ su cheng2 密码: su: 鉴定故障 [cheng1@localhost ~]$ 试过很多次, 也 ...