MMKVUtil.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. package com.edufound.base.util;
  2. import android.os.Parcelable;
  3. import com.tencent.mmkv.MMKV;
  4. import java.util.Collections;
  5. import java.util.Set;
  6. public class MMKVUtil {
  7. private MMKV mkv;
  8. private MMKVUtil() {
  9. mkv = MMKV.defaultMMKV();
  10. }
  11. public static MMKVUtil getInstance() {
  12. return SingletonHolder.sInstance;
  13. }
  14. //静态内部类
  15. private static class SingletonHolder {
  16. private static final MMKVUtil sInstance = new MMKVUtil();
  17. }
  18. /**
  19. * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法
  20. *
  21. * @param key
  22. * @param object
  23. */
  24. public void encode(String key, Object object) {
  25. if (object instanceof String) {
  26. mkv.encode(key, (String) object);
  27. } else if (object instanceof Integer) {
  28. mkv.encode(key, (Integer) object);
  29. } else if (object instanceof Boolean) {
  30. mkv.encode(key, (Boolean) object);
  31. } else if (object instanceof Float) {
  32. mkv.encode(key, (Float) object);
  33. } else if (object instanceof Long) {
  34. mkv.encode(key, (Long) object);
  35. } else if (object instanceof Double) {
  36. mkv.encode(key, (Double) object);
  37. } else if (object instanceof byte[]) {
  38. mkv.encode(key, (byte[]) object);
  39. } else {
  40. mkv.encode(key, object.toString());
  41. }
  42. }
  43. public void encodeSet(String key, Set<String> sets) {
  44. mkv.encode(key, sets);
  45. }
  46. public void encodeParcelable(String key, Parcelable obj) {
  47. mkv.encode(key, obj);
  48. }
  49. /**
  50. * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值
  51. *
  52. * @param key
  53. * @param defaultObject
  54. * @return
  55. */
  56. public Object decode(String key, Object defaultObject) {
  57. if (defaultObject instanceof String) {
  58. return mkv.decodeString(key, (String) defaultObject);
  59. } else if (defaultObject instanceof Integer) {
  60. return mkv.decodeInt(key, (Integer) defaultObject);
  61. } else if (defaultObject instanceof Boolean) {
  62. return mkv.decodeBool(key, (Boolean) defaultObject);
  63. } else if (defaultObject instanceof Float) {
  64. return mkv.decodeFloat(key, (Float) defaultObject);
  65. } else if (defaultObject instanceof Long) {
  66. return mkv.decodeLong(key, (Long) defaultObject);
  67. } else if (defaultObject instanceof Double) {
  68. return mkv.decodeDouble(key, (Double) defaultObject);
  69. } else if (defaultObject instanceof byte[]) {
  70. return mkv.decodeBytes(key, (byte[]) defaultObject);
  71. }
  72. return defaultObject;
  73. }
  74. /**
  75. * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值
  76. */
  77. public Integer decodeInt(String key) {
  78. return mkv.decodeInt(key, 0);
  79. }
  80. public Double decodeDouble(String key) {
  81. return mkv.decodeDouble(key, 0.00);
  82. }
  83. public Long decodeLong(String key) {
  84. return mkv.decodeLong(key, 0L);
  85. }
  86. public Long decodeLong(String key, long defaultValue) {
  87. return mkv.decodeLong(key, defaultValue);
  88. }
  89. public Boolean decodeBoolean(String key) {
  90. return mkv.decodeBool(key, false);
  91. }
  92. public Float decodeFloat(String key) {
  93. return mkv.decodeFloat(key, 0F);
  94. }
  95. public byte[] decodeBytes(String key) {
  96. return mkv.decodeBytes(key);
  97. }
  98. public String decodeString(String key) {
  99. return mkv.decodeString(key, "");
  100. }
  101. public Set<String> decodeStringSet(String key) {
  102. return mkv.decodeStringSet(key, Collections.<String>emptySet());
  103. }
  104. public Parcelable decodeParcelable(String key, Class clz) {
  105. return mkv.decodeParcelable(key, clz);
  106. }
  107. /**
  108. * 移除某个key对
  109. *
  110. * @param key
  111. */
  112. public void removeKey(String key) {
  113. mkv.removeValueForKey(key);
  114. }
  115. /**
  116. * 移除多个key对
  117. *
  118. * @param key
  119. */
  120. public void removeKeys(String[] key) {
  121. mkv.removeValuesForKeys(key);
  122. }
  123. /**
  124. * 获取全部key对
  125. */
  126. public String[] getAllKeys() {
  127. return mkv.allKeys();
  128. }
  129. /**
  130. * 含有某个key
  131. *
  132. * @param key
  133. * @return
  134. */
  135. public boolean hasKey(String key) {
  136. return mkv.containsKey(key);
  137. }
  138. /**
  139. * 含有某个key
  140. *
  141. * @param key
  142. * @return
  143. */
  144. public boolean have(String key) {
  145. return mkv.contains(key);
  146. }
  147. /**
  148. * 清除所有key
  149. */
  150. public void clearAll() {
  151. mkv.clearMemoryCache();
  152. mkv.clearAll();
  153. mkv.clear();
  154. }
  155. /**
  156. * 获取操作对象
  157. *
  158. * @return
  159. */
  160. public MMKV getMkv() {
  161. return mkv;
  162. }
  163. }