kotlin常用工具类总结,高效优雅的开发Android
随着Kotlin的普及,很有必要对开发中常用的工具类总结整理,当然包括
利用kotlin扩展Android原生控件方法、属性。
主要分工具类util跟原生控件扩展ext两部分
-
toast 用法
toast("hello")
-
click 用法
button.click{ // todo }
- 启动activity
start+要启动的activity (比如 DemoActivity)
-
SharePreferenceUtil 用法
1). var spValue by SharePreferenceUtil ("key", "DefaultValue") 2). set data spValue = "value" 3). get data spValue
-
NetworkUtil 用法
1). isNetworkAvailable(context) 2). isConnected(context) 3). getNetworkType(context)
-
获取屏幕宽高以及Dp/Px转化用法
1). dp2px(context) or px2dp 2). screenWidth or screenHeight
-
RegularUtil 用法
1). 身份证是否合法 isIDCard("no") 2). 手机号是否合法 isMobile("no") 3). isEmail是否合法 isEmail("xx.mail.com") 4). 用户名校验 isUsername() 5). 格式日期校验 isDate()
-
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哦!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
ItemTouchHelper 实现交互动画
目录介绍 01.拖拽需要实现功能 02.几个重要的方法说明 03.简单实现思路 04.拖拽效果上优化 05.完整代码展示 好消息 博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!同时也开源了生活博客,从12年起,积累共计N篇[近100万字,陆续搬到网上],转载请注明出处,谢谢! 链接地址:https://github.com/yangchong211/YCBlogs 如果觉得好,可以star一下,谢谢!当然也欢迎提出建议,万事起于忽微,量变引起质变! 01.拖拽需要实现功能 需要实现拖拽的功能如下所示 长按item后拖动,与其他item交换位置 按住item右面的图标后拖动,与其他item交换位置 左滑item变透明并缩小,超出屏幕后,其他item补上 右滑item变透明并缩小,超出屏幕后,其他item补上 02.几个重要的方法说明 几个重要的方法说明 需要自定义类实现ItemTo...
- 下一篇
物联网数据分析服务之数据开发API使用说明
简介 物联网数据分析,又称Link Analytics,是阿里云为物联网开发者提供的设备智能分析服务,全链路覆盖了设备数据生成、管理(存储)、清洗、分析及可视化等环节。有效降低数据分析门槛,助力物联网开发工作。 数据开发提供云上交互式查询服务,无需数据预处理过程,直接使用标准的SQL语句对设备进行数据分析。可以对以下三个数据来源中的设备数据进行分析。 物联网平台的系统数据 基于产品能力定义的设备数据 用户授权的业务数据 使用场景 无需实时处理数据的场景均可使用。但是如果对实时性有要求,请使用数据分析服务的实时数据分析功能,因为数据从设备上报到物联网平台,再完成SQL数据分析,有大约5分钟左右的延迟。 设备监控 报表统计 设备行为分析 架构图 API服务 前提:已创建好物联网平台上的产品及设备 一、添加新的API 二、编写SQL语句本文中的示例为统计产品表中去重设备数 三、测试与发布 JAVA调用示例 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.or...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能