天天看點

kotlin常用工具類總結,高效優雅的開發Android

kotlin常用工具類總結,高效優雅的開發Android

  随着Kotlin的普及,很有必要對開發中常用的工具類總結整理,當然包括

利用kotlin擴充Android原生控件方法、屬性。

主要分工具類util跟原生控件擴充ext兩部分

  1. toast 用法
    toast("hello")
                
  2. click 用法
    button.click{
           // todo
        }
        
               
  3. 啟動activity

start+要啟動的activity (比如 DemoActivity)

  1. SharePreferenceUtil 用法
    1). var spValue by SharePreferenceUtil ("key", "DefaultValue")
    
     2). set data spValue = "value"
    
     3). get data spValue
               
  1. NetworkUtil 用法
    1). isNetworkAvailable(context)
    
    2). isConnected(context)
    
    3). getNetworkType(context)
               
  2. 擷取螢幕寬高以及Dp/Px轉化用法
    1). dp2px(context) or px2dp
    
    2). screenWidth or screenHeight
               
  1. RegularUtil 用法
    1). 身份證是否合法 isIDCard("no")
    
    2). 手機号是否合法 isMobile("no")
    
    3). isEmail是否合法 isEmail("xx.mail.com")
    
    4). 使用者名校驗 isUsername()
    
    5). 格式日期校驗 isDate()
               
  2. EncodeUtil 用法
    1). 普通字元串編碼 encode(input,"")
    
    2). 普通字元串解碼 decode(input,"")
    
    3). base64Encode(input: String),base64Decode(input: String?)
    
    4). binaryEncode(input: String),binaryDecode(input: String)
    
    5). htmlEncode(input: CharSequence?),htmlDecode(input: String?)
               

在此,僅列舉一下 SharePreferenceUtil代碼,

class SharePreferenceUtil<T>(val name: String, private val default: T) : ReadWriteProperty<Any?, T> {
private val prefs: SharedPreferences by lazy {
     appCtx.getSharedPreferences("default",Context.MODE_PRIVATE)
}

override fun getValue(thisRef: Any?, property: KProperty<*>): T {
    return getValue(name, default)
}

override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
    putValue(name, value)
}

@SuppressLint("CommitPrefEdits")
private fun <T> putValue(name: String, value: T) = with(prefs.edit()) {
    when (value) {
        is Long -> putLong(name, value)
        is String -> putString(name, value)
        is Int -> putInt(name, value)
        is Boolean -> putBoolean(name, value)
        is Float -> putFloat(name, value)
        else -> putString(name, serialize(value))
    }.apply()
}

@Suppress("UNCHECKED_CAST")
fun <T> getValue(name: String, default: T): T = with(prefs) {
    val res: Any = when (default) {
        is Long -> getLong(name, default)
        is String -> this!!.getString(name, default)!!
        is Int -> getInt(name, default)
        is Boolean -> getBoolean(name, default)
        is Float -> getFloat(name, default)
        else -> deSerialization(getString(name, serialize(default)))
    }
    return res as T
}

/**
 * 删除全部資料
 */
fun clearPreference() {
    prefs.edit().clear().apply()
}

/**
 * 根據key删除存儲資料
 */
fun clearPreference(key: String) {
    prefs.edit().remove(key).apply()
}

/**
 * 序列化對象
 * @param person
 * *
 * @return
 * *
 * @throws IOException
 */
@Throws(IOException::class)
private fun <A> serialize(obj: A): String {
    val byteArrayOutputStream = ByteArrayOutputStream()
    val objectOutputStream = ObjectOutputStream(
        byteArrayOutputStream
    )
    objectOutputStream.writeObject(obj)
    var serStr = byteArrayOutputStream.toString("ISO-8859-1")
    serStr = java.net.URLEncoder.encode(serStr, "UTF-8")
    objectOutputStream.close()
    byteArrayOutputStream.close()
    return serStr
}

/**
 * 反序列化對象
 * @param str
 * *
 * @return
 * *
 * @throws IOException
 * *
 * @throws ClassNotFoundException
 */
@Suppress("UNCHECKED_CAST")
@Throws(IOException::class, ClassNotFoundException::class)
private fun <A> deSerialization(str: String?): A {
    val redStr = java.net.URLDecoder.decode(str, "UTF-8")
    val byteArrayInputStream = ByteArrayInputStream(
        redStr.toByteArray(charset("ISO-8859-1"))
    )
    val objectInputStream = ObjectInputStream(
        byteArrayInputStream
    )
    val obj = objectInputStream.readObject() as A
    objectInputStream.close()
    byteArrayInputStream.close()
    return obj
}
           
/**
 * 查詢某個key是否已經存在
 *
 * @param key
 * @return
 */
fun contains(key: String): Boolean {
    return prefs.contains(key)
}

/**
 * 傳回所有的鍵值對
 *
 * @param context
 * @return
 */
fun getAll(): Map<String, *> {
    return prefs.all
}           

}

···

最後,附上Github位址,

https://github.com/AlbertShen0211/Android-Control-Extension

歡迎使用,覺得好的話,不要忘了給star哦!

繼續閱讀