Kotlin学习及遇到的问题

2020年春节期间,疫情爆发,这里很多企业延迟上班。相信和我一样,不工作的容易让人产生危机感。因为我是Android开发工程师,进2年Kotlin发展很快,很多技术公司都在使用转变Kotlin开发APP,为了提升自己,我决定将一个已经上线的简单项目转换成Kotlin,这里说一下我在转换中遇到的问题。

项目还没有完全转换,这里我只说下其中一部分,下面是我的项目包

首先说下项目架构是基于MVP的,因为之前就是mvp这里为了方便对架构不做改变。

项目依赖

这里之前依赖的一个xmvp依赖包,将这个也转换成kotlin,


 


 

这里kotlin中不管是继承还是实现都是使用:符号,这里先把被继承(被实现)类说成父类,继承(实现)类说成子类,如果父类有构造或者泛型,那么之类也必须有构造和泛型。Kotlin中 out 和 in的区别可以去Kotlin网站查看。

这里说下Kotlin中的共享参数,这个说实话确实是比androidSharedPreferences共享参数感觉方便很多,下面贴出代码

class Preference<T>(val name: String, private val default: T) {

    private val prefs: SharedPreferences by lazy { KBaseApp.instance.applicationContext.getSharedPreferences(name, Context.MODE_PRIVATE) }

    operator fun getValue(thisRef: Any?, property: KProperty<*>): T {
        LoggerHelper.i("调用$this 的getValue()")
        return getSharePreferences(name, default)
    }

    operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
        LoggerHelper.i("调用$this 的setValue() value参数值为:$value")
        putSharePreferences(name, value)
    }

    @SuppressLint("CommitPrefEdits")
    private fun putSharePreferences(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 -> throw IllegalArgumentException("This type of data cannot be saved!")
        }.apply()
    }

    @Suppress("UNCHECKED_CAST")
    private fun getSharePreferences(name: String, default: T): T = with(prefs) {
        val res: Any = when (default) {
            is Long -> getLong(name, default)
            is String -> getString(name, default)
            is Int -> getInt(name, default)
            is Boolean -> getBoolean(name, default)
            is Float -> getFloat(name, default)
            else -> throw IllegalArgumentException("This type of data cannot be saved!")
        }
        return res as T
    }
}

object KSP {
    var sign: String by Preference( PublicCategory.SIGNTOKEN, "")//签名
    var login_status: String by Preference( PublicCategory.LOGIN_SUCCESS, "")//登录状态
    var login_admin: String by Preference( PublicCategory.LOGIN_ADMIN, "")//登录账号
    var member_phone: String by Preference( PublicCategory.MEMBER_PHONE, "")//会员手机号
    var member_id: String by Preference( PublicCategory.MEMBER_ID, "")//会员ID
}

代码中使用直接调用赋值就可以。

这里只说这些吧,后续遇到的问题,还会和大家分享

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值