首页 Android正文

Kotlin实战中的BUG收集记录(持续更新。。。)

1.Kotlin Parameter specified as non-null is null

原因:kotlin 中对于回调对象若是为说明可以为空的情况下,kotlin 会自动对齐对象进行非空检查,就会报出如上错误

具体解决办法:先找到所在的报错方法,然后在看参数是否为空,最后参数设置为可空类型,就是增加一个问好?

//之前代码

override fun initData(**savedInstanceState: Bundle**) {
        myrx_title.run {
            setLeftFinish(this@AboutContactActivity)
            title = "联系我们"
        }
        p.getContactData()
    }1234567

//修改之后代码

override fun initData(savedInstanceState: Bundle?) {

2. 明明xml中有对应id,但是就是布局id为空,尤其是在内部类中。折腾了半天才发现导包问题

import kotlinx.android.synthetic.main.add_shipping_add_activity.*//这是正确的
import kotlinx.android.synthetic.main.add_shipping_add_activity.view.*//这是错误的


3.Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter intent

类型兼容问题
例如 以下java代码

//使用kotlin是需要在调用的方法的父方法参数类型加上 ? 表示内容可空

protected void onCreate(Bundle savedInstanceState) {}


//使用kotlin是需要在调用的方法的父方法参数类型加上 !! 表示不可空

protected void onCreate(@NonNull Bundle savedInstanceState) {}


4.

kotlin.NotImplementedError: An operation is not implemented: not implemented

原因:出现该错误是因为kotlin在你实现抽象方法的时候会自动生成以下代码:

TODO("not implemented") //To change body of created functions use File | Settings | File Templates.

在Android里面加个TODO并不会影响程序运行,可是在Kotlin里面就不一样啦,如果你在某个函数的第一行添加TODO的话,那么很抱歉,它不会跳过,然后运行下一行代码。那如果真要添加TODO的话,那就只能在函数的最后一行添加了。

解决方案:

我们只需要把上面这句话去掉即可

5.

Error:Failed to resolve: org.jetbrains.kotlin:kotlin-stdlib-jre7:1.3.31

kotlin插件版本升级到1.3.31

ext.kotlin_version = '1.3.31'

版本报以下错误:

Error:Failed to resolve: org.jetbrains.kotlin:kotlin-stdlib-jre7:1.3.31 

解决方案:

把根目录下的build.gradle中的

implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"修改成
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"就可以解决

6.

java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.inter

在项目中的application中使用registerActivityLifecycleCallbacks()方法时,报了一个异常

java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.interjava.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.inter

出现原因:savedInstanceState这个参数在原来的代码中被设定是不能为空的,但是现在传入的是空的。错误图示如下:

image.png

image.png

如果使用这个 registerActivityLifecycleCallbacks()这个方法时,要特别注意savedInstanceState: Bundle这个参数的问号,没有这个问号。

解决方案:

再savedInstanceState: Bundle后面加一个问号即可。如图所示

image.png

 

评论

在线客服-可直接交谈

您好!有什么需要可以为您服务吗?