首页 > 解决方案 > 将 Java 代码转换为 Kotlin 以实现 OnChangeListener 时遇到问题

问题描述

我有这段代码来实现Range Bar 库的侦听器:

rangebar.setOnRangeBarChangeListener(new RangeBar.OnRangeBarChangeListener() {
        @Override
        public void onRangeChangeListener(RangeBar rangeBar, int leftPinIndex,
                                          int rightPinIndex, String leftPinValue, String rightPinValue) {
        }

    });

现在我尝试通过以下方式将其导入并更改为 kotlin:

rangebar.setOnRangeBarChangeListener(object: RangeBar.OnRangeBarChangeListener {
        override fun onRangeChangeListener(rangeBar:RangeBar, leftPinIndex:Int,
                                  rightPinIndex:Int, leftPinValue:String, rightPinValue:String) {
            textView.text = "$leftPinIndex"
        }
    })

或者

rangebar.setOnRangeBarChangeListener { rangeBar, leftPinIndex, 
rightPinIndex, leftPinValue, rightPinValue -> 
textView.text = "$leftPinIndex" }

在这两种情况下,应用程序都会崩溃并出现以下错误:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void com.appyvet.materialrangebar.RangeBar.setOnRangeBarChangeListener> (com.appyvet.materialrangebar.RangeBar$OnRangeBarChangeListener)”

我究竟做错了什么?

标签: javaandroidkotlinnullpointerexception

解决方案


rangebar的,

为避免崩溃,请像这样使用:

rangebar?.setOnRangeBarChangeListener(object: RangeBar.OnRangeBarChangeListener {
    override fun onRangeChangeListener(rangeBar:RangeBar, leftPinIndex:Int, rightPinIndex:Int, leftPinValue:String, rightPinValue:String) {
        textView.text = "$leftPinIndex"
    }
})

或者

rangebar?.setOnRangeBarChangeListener { rangeBar, leftPinIndex, rightPinIndex, leftPinValue, rightPinValue -> 
    textView.text = "$leftPinIndex" 
}

推荐阅读