@@ -59,38 +59,40 @@ fun Context.putSpFloat(key: String, value: Float, fileName: String = defFileName
5959fun Context.getSpFloat (key : String , defValue : Float = 0F, fileName : String = defFileName): Float =
6060 getSp(fileName).getFloat(key, defValue)
6161
62+
6263/* *
63- * 保存long、float和int数据,double除外
64- * putSpNumber方法的作用跟putSpInt、putSpLong和putSpFloat的作用是一样的
64+ * 保存数据,数据类型由传入的值确定
65+ * @throws IllegalArgumentException:数据类型不属于SharedPreferences能保存的类型
6566 */
6667@SuppressLint(" ApplySharedPref" )
67- fun Context.putSpNumber (key : String , value : Number , fileName : String = defFileName): Boolean {
68- val editor = getSp(fileName).edit()
69- return when (value) {
70- is Int -> editor.putInt(key, value).commit()
71- is Float -> editor.putFloat(key, value).commit()
72- is Long -> editor.putLong(key, value).commit()
73- else -> {
74- false
75- }
68+ fun <T : Any > Context.putSp (key : String , value : T , fileName : String = defFileName): Boolean =
69+ with (getSp(fileName).edit()) {
70+ when (value) {
71+ is Int -> putInt(key, value)
72+ is Float -> putFloat(key, value)
73+ is Long -> putLong(key, value)
74+ is Double -> putFloat(key, value.toFloat())
75+ is Boolean -> putBoolean(key, value)
76+ is String -> putString(key, value)
77+ else -> throw IllegalArgumentException (" This type can not be saved into SharedPreferences!" )
78+ }.commit()
7679 }
77- }
7880
7981/* *
80- * 获取数值型数据
81- * @param defValue 重要:根据默认值来判断数据类型,如果是double的话就转为float
82+ * 取出数据,数据类型由传入的默认值确定
83+ * @throws IllegalArgumentException:数据类型不属于SharedPreferences能保存的类型
8284 */
83- fun Context. getSpNumber ( key : String , defValue : Number , fileName : String = defFileName): Number {
84- val preference = getSp(fileName)
85- return when (defValue) {
86- is Int -> preference. getInt(key, defValue)
87- is Float -> preference. getFloat(key, defValue)
88- is Long -> preference. getLong(key, defValue)
89- is Double -> preference.getFloat (key, defValue.toFloat() )
90- else -> {
91- defValue
92- }
93- }
85+ @Suppress( " UNCHECKED_CAST " , " IMPLICIT_CAST_TO_ANY " )
86+ fun < T : Any > Context. getSp ( key : String , defValue : T , fileName : String = defFileName): T = with ( getSp(fileName)) {
87+ when (defValue) {
88+ is Int -> getInt(key, defValue)
89+ is Float -> getFloat(key, defValue)
90+ is Long -> getLong(key, defValue)
91+ is String -> getString (key, defValue)
92+ is Boolean -> getBoolean(key, defValue)
93+ is Double -> getFloat(key, defValue.toFloat())
94+ else -> throw IllegalArgumentException ( " This type can not be found in SharedPreferences! " )
95+ } as T
9496}
9597
9698/* *
@@ -106,3 +108,5 @@ fun Context.deleteSpKey(key: String, fileName: String = defFileName): Boolean =
106108fun Context.clearSp (fileName : String = defFileName): Boolean =
107109 getSp(fileName).edit().clear().commit()
108110
111+
112+
0 commit comments