Android 使用腾讯mmkv数据持久化技术

在安卓中可以使用SharedPreferences作为数据持久化的工具,它可以存储键值对形式的数据,本文章将介绍腾讯开源框架MMKV存储的使用,mmkv大体的使用方式与SharedPreferences相似。mmkv存储作为常用的一种组件,可以将mmkv封装成一个TencentMmkvUtil工具类,在结合单例模式,实现数据的快速存储,下面是一整个TencentMmkvUtil工具类的代码,工具类提供各种类型数据的保存和读取方法,还提供删除指定键值的方法和清楚所有数据的方法。

/**
 * TencentMmkvUtil
 * Create on 20220115 by dyj
 */
public class TencentMmkvUtil {
    /**
     * 默认的权重比
     **/
    public static final float DEFAULT_WEIGHT = 0.667f;

    private MMKV mmkv;

    private TencentMmkvUtil() {
        mmkv = MMKV.defaultMMKV();
    }

    public static TencentMmkvUtil newInstance() {
        return SingletonHolder.sInstance;
    }

    //静态内部类
    private static class SingletonHolder {
        private static final TencentMmkvUtil sInstance = new TencentMmkvUtil();
    }

    /**
     * 添加String类型的数据到shared里面保存
     *
     * @param key   键
     * @param value 值
     */
    public void setString(String key, String value) {
        if (!isEmpty(key, value)) {
            if (null == mmkv) {
                mmkv = MMKV.defaultMMKV();
            }
            assert mmkv != null;
            mmkv.encode(key, value);
        }
    }

    /**
     * 获取string类型的数据
     *
     * @param key 键
     * @return 返回值,如果shared里面没有这个值则返回null
     */
    public String getString(String key) {
        if (null == key) {
            return null;
        }
        if (null == mmkv) {
            mmkv = MMKV.defaultMMKV();
        }
        assert mmkv != null;
        return mmkv.decodeString(key, "");
    }

    /**
     * 获取string类型的数据
     *
     * @param key 键
     * @return 返回值,如果shared里面没有这个值则返回null
     */
    public String getTimeJiHuaString(String key) {
        if (null == key) {
            return null;
        }
        if (null == mmkv) {
            mmkv = MMKV.defaultMMKV();
        }
        assert mmkv != null;
        return mmkv.decodeString(key, "{}");
    }

    /**
     * 获取string类型的数据
     *
     * @param key 键
     * @return 返回值,如果shared里面没有这个值则返回str
     */
    public String getString(String key, String str) {
        if (null == key) {
            return null;
        }
        if (null == mmkv) {
            mmkv = MMKV.defaultMMKV();
        }
        assert mmkv != null;
        return mmkv.decodeString(key, str);
    }

    /**
     * 设置boolean值
     *
     * @param key   键
     * @param value 值
     */
    public void setBoolean(String key, boolean value) {
        if (null == key) {
            return;
        }
        if (null == mmkv) {
            mmkv = MMKV.defaultMMKV();
        }
        assert mmkv != null;
        mmkv.encode(key, value);
    }

    /**
     * 设置int值
     *
     * @param key   键
     * @param value 值
     */
    public void setInt(String key, int value) {
        if (null == key) {
            return;
        }
        if (null == mmkv) {
            mmkv = MMKV.defaultMMKV();
        }
        assert mmkv != null;
        mmkv.encode(key, value);
    }

    /**
     * 设置long值
     *
     * @param key   键
     * @param value 值
     */
    public void setLong(String key, long value) {
        if (null == key) {
            return;
        }
        if (null == mmkv) {
            mmkv = MMKV.defaultMMKV();
        }
        assert mmkv != null;
        mmkv.encode(key, value);
    }

    /**
     * 获取boolean值
     *
     * @param key 键
     * @return 默认返回false
     */
    public boolean getBoolean(String key) {
        if (null == key) {
            return false;
        }
        if (null == mmkv) {
            mmkv = MMKV.defaultMMKV();
        }
        assert mmkv != null;
        return mmkv.decodeBool(key, false);
    }

    public boolean getBooleanTrue(String key) {
        if (null == key) {
            return false;
        }
        if (null == mmkv) {
            mmkv = MMKV.defaultMMKV();
        }
        assert mmkv != null;
        return mmkv.decodeBool(key, true);
    }

    /**
     * 获取int值
     *
     * @param key 键
     * @return 默认返回-1
     */
    public int getInt(String key) {
        if (null == key) {
            return -1;
        }
        if (null == mmkv) {
            mmkv = MMKV.defaultMMKV();
        }
        assert mmkv != null;
        return mmkv.decodeInt(key, -1);
    }

    /**
     * 获取int值
     *
     * @param key 键
     * @return 默认返回0
     */
    public int getIntK(String key) {
        if (null == key) {
            return 0;
        }
        if (null == mmkv) {
            mmkv = MMKV.defaultMMKV();
        }
        assert mmkv != null;
        return mmkv.decodeInt(key, 0);
    }

    /**
     * 获取long值
     *
     * @param key 键
     * @return 默认返回-1
     */
    public long getLong(String key) {
        if (null == key) {
            return -1;
        }
        if (null == mmkv) {
            mmkv = MMKV.defaultMMKV();
        }
        assert mmkv != null;
        return mmkv.decodeLong(key, -1);
    }

    /**
     * 设置float
     *
     * @param key
     * @param value
     * @return
     */
    public boolean setFloat(String key, float value) {
        if (null == key) {
            return false;
        }
        if (null == mmkv) {
            mmkv = MMKV.defaultMMKV();
        }
        assert mmkv != null;
        return mmkv.encode(key, value);
    }

    /**
     * 获取float类型
     *
     * @param key
     * @return
     */
    public float getFloat(String key) {
        if (null == key || "".equals(key)) {
            return DEFAULT_WEIGHT;
        }

        if (null == mmkv) {
            mmkv = MMKV.defaultMMKV();
        }

        assert mmkv != null;
        if (!mmkv.contains(key)) {
            return DEFAULT_WEIGHT;
        }

        return mmkv.decodeFloat(key, DEFAULT_WEIGHT);
    }

    /**
     * 判断是否为空,如果是空则返回true
     *
     * @param key
     * @param value
     * @return
     */
    private boolean isEmpty(String key, String value) {
        if (null == key || null == value) {
            return true;
        }
        return false;
    }

    /**
     * 清除当前保存在shared的数据
     */
    public void clearAll() {
        if (null == mmkv) {
            mmkv = MMKV.defaultMMKV();
        }
        if (mmkv != null)
            mmkv.clearAll();
        mmkv = null;
    }

    /**
     * 根据key移除掉记录
     *
     * @param key key
     * @return true is remove success,other fail
     */
    public boolean removeKey(String key) {
        if (mmkv.contains(key)) {
            return mmkv.edit().remove(key).commit();
        }
        return false;
    }

    /**
     * 根据key是否存在
     *
     * @param key key
     */
    public boolean containsKey(String key) {
        return mmkv.contains(key);
    }

使用示例:

保存一个String类型的数据:

 TencentMmkvUtil.newInstance().setString("key","value")

读取指定键值的数据:

TencentMmkvUtil.newInstance().getString("key","default")

在进行数据读取时可以设置在get方法中添加多一个参数,这个参数最为读取的默认值,在所读取的数据在内存中为空时,默认将这一默认值作为读取到的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值