有什么方法可以阻止 kotlin 中 EditText 中的空 Decimal 值崩溃?

Is there any way on stop crashing in empty Decimal value in EditText in kotlin?

当我们输入空值时,我的应用程序需要帮助。当我尝试计算时,如果没有价值,是否有任何方法可以防止崩溃。 只是我需要当我按下计算按钮时它在答案

中将文本设置为 "Put a value "

当我尝试将字符串转换为 DecimalorNull 类型时,计算出现错误并阻止构建

这是我的布局xml

<EditText
    android:id="@+id/distance"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="@string/distance"
    android:inputType="number|numberDecimal|numberSigned"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.094"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.034" />

<EditText
    android:id="@+id/initalVelocity"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="@string/initialVelocity"
    android:inputType="number|numberDecimal|numberSigned"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.094"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.133" />

<EditText
    android:id="@+id/time"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="@string/time"
    android:inputType="number|numberDecimal|numberSigned"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.094"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.232" />

<TextView
    android:id="@+id/answer"
    android:layout_width="219dp"
    android:layout_height="37dp"
    android:text="@string/answer"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.096"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.35" />

<Button
    android:id="@+id/calculate"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/calculate"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.462" />

这是我的主要 activity kt 文件:

calculate.setOnClickListener {
        val s = distance.text.toString().toDouble()
        val u = initalVelocity.text.toString().toDouble()
        val t = time.text.toString().toDouble()

        val a = (((2* s))-(2*(u*t)))/(t*t)

            answer.setText("answer $a m/(s)^2")

    }

图片

首先点击按钮,你必须检查 EditText 是否有任何值,如果没有则不计算

这里是例子

btn.setOnClickListener{
        //read value from `EditText` to a String variable
        val s = distance.text.toString().trim().toDouble()
        val u = initalVelocity.text.toString().trim().toDouble()
        val t = time.text.toString().trim().toDouble()

        //check if the `EditText` have values or not
        if(s > 0 && u  > 0 && t > 0) {
            //calculate
            val a = (((2* s))-(2*(u*t)))/(t*t)
           answer.setText("answer $a m/(s)^2")

        }else{
            Toast.makeText(applicationContext, "Please value! ", Toast.LENGTH_SHORT).show()
        }
    } 

你可以找到更清晰的解决方案here and type-conversion-kitlin

试试这个

calculate.setOnClickListener {

if((distance.text.toString().lenght>0) && 
(initalVelocity.text.toString().lenght>0) && 
 (time.text.toString().lenght>0)) {
        val s = distance.text.toString().toDouble()
        val u = initalVelocity.text.toString().toDouble()
        val t = time.text.toString().toDouble()
        val a = (((2* s))-(2*(u*t)))/(t*t)
        answer.setText("answer $a m/(s)^2")

    }else{
    //String null
    }
}