Android Hawk数据库的源码解析,Github开源项目,基于SharedPreferences的的存储框架

本文介绍了Android Hawk数据库,一个简洁的、基于SharedPreferences的存储框架,由Orhan Obut创建。Hawk提供安全、简单的键值存储,支持多种数据类型,并通过加密增强安全性。文章详细探讨了Hawk的用法、初始化过程以及核心源码,包括数据的加密、序列化和存储机制。
摘要由CSDN通过智能技术生成

今天看了朋友一个项目用到了Hawk,然后写了这边文章

一、了解一下概念

Android Hawk数据库github开源项目 Hawk是一个非常便捷的数据库.操作数据库只需一行代码,能存任何数据类型.
相信大家应该很熟悉SharedPreferences。它是一种轻量级的存储简单配置信息的存储机制,以key-value的形式保存数据。 本文介绍就是基于SharedPreferences的的存储框架,是由Orhan Obut大神写的, 它是Secure,simple key-value storage for Android。安全简单的Android存储工具。

这里附上Orhan Obut大神的Github 地址 https://github.com/orhanobut

**

二、用法

**

1.添加依赖

	 compile 'com.orhanobut:hawk:2.0.1'

2.初始化

      Hawk.init(this).build();

这两步就可以正常使用了,那就看一下API吧

<T> :Saves any type including any collection, primitive values or custom objects
        任何数据类型()
存数据
public static <T> boolean put(String key, T value) {
    return hawkFacade.put(key, value);
  }

取数据
  public static <T> T get(String key) {
    return hawkFacade.get(key);
  }
总数量
  public static long count() {
    return hawkFacade.count();
  }

删除全部数据
  public static boolean deleteAll() {
    return hawkFacade.deleteAll();
  }

 删除某个数据
  public static boolean delete(String key) {
    return hawkFacade.delete(key);
  }

是否包含有某个的数据
  public static boolean contains(String key) {
    return hawkFacade.contains(key);
  }
来验证如果准备使用。如果正确地初始化和建造@return真实。否则错误。
  public static boolean isBuilt() {
    return hawkFacade.isBuilt();
  }

  public static void destroy() {
    hawkFacade.destroy();
  }

下面是在官网图片 让我们看看它是怎么工作的
在这里插入图片描述
看图片一目了然左边的PUT方法中,是把T value 存储到Disk当中。大致流程是,先将数据进行toString的转换,接下来是加密,然后进行序列化,最后是存储,用的就是SharePreference的存储。获取数据时就正好逆过来啦。

三、源码解析开始啦

先看看初始化的代码

   Hawk.init(this).build();
     
 /**
   * This will init the hawk without password protection.
   *
   * @param context is used to instantiate context based objects.
   *                ApplicationContext will be used
   */
  public static HawkBuilder init(Context context) {
    HawkUtils.checkNull("Context", context);
    hawkFacade = null;
    return new HawkBuilder(context);
  }

  static void build(HawkBuilder hawkBuilder) {
    hawkFacade = new DefaultHawkFacade(hawkBuilder);
  }

初始化中创建了HawkBuilder对象,下面如下代码

 public HawkBuilder(Context context) {
    HawkUtils.checkNull("Context", context);

    this.context = context.getApplicationContext();
  }
 public void build() {
    Hawk.build(this);
  }

其中也用到了 HawkUtils,看一下代码
这个工具类就是对数据的判空处理

final class HawkUtils {

  private HawkUtils() {
    //no instance
  }

  public static void checkNull(String message, Object value) {
    if (value == null) {
      throw new NullPointerException(message + " should not be null");
    }
  }

  public static void checkNullOrEmpty(String message, String value) {
    if (isEmpty(value)) {
      throw new NullPointerException(message + " should not be null or empty");
    }
  }

  public static boolean isEmpty(String text) {
    return text == null || text.trim().length() == 0;
  }
}

上面有个最重的没有看完 DefaultHawkFacade
先看一下源码吧

public DefaultHawkFacade(HawkBuilder builder) {
    encryption = builder.getEncryption();
    storage = builder.getStorage();
    converter = builder.getConverter();
    serializer = builder.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值