0

I need a help in my app when we put an empty value. When i try to calculate is there any way to prevent crash if there is no value. Just i need that when i press calculate button it set text to "Put a value " in Answers

When I try to convert string to DecimalorNull type is just get error in calculation and prevent from it building

here is my layout 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" />

Here is mine main activity kt file :

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")

    }

Image

![enter image description here

https://i.stack.imgur.com/gFom6.png

https://i.stack.imgur.com/QJZFf.png

Benjith Mathew
  • 1,211
  • 1
  • 11
  • 23
a2krocks
  • 935
  • 1
  • 11
  • 18

2 Answers2

1

Firstly on button click you have to check the EditText having any value or not if not don't calculate

here is example

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()
        }
    } 

You can find more clear solution form here and type-conversion-kitlin

ND1010_
  • 3,743
  • 24
  • 41
0

Try this

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
    }
}
Ramesh sambu
  • 3,577
  • 2
  • 24
  • 39