jane
jane

Reputation: 21

java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.EditText

I'm getting the following Error:

java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.EditText at com.example.bmicalculator.MainActivity.initializeApp(MainActivity.java.32)

Main Activity:

public class MainActivity extends Activity {

private EditText heightIn;
private EditText weightIn;
private Button CalculateButton;
private double weight =0;
private double height =0;
private TextView BmiResult;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initializeApp();
    }

    private void initializeApp() {
        heightIn = (EditText) findViewById (R.id.HeightInput1);
        weightIn = (EditText) findViewById (R.id.WeightInput1);
        CalculateButton = (Button) findViewById (R.id.CalculateButton);
        BmiResult = (TextView) findViewById (R.id.BmiResult);

    }

    public void calculateBMI(View v) {
        weight = Double.parseDouble(weightIn.getText().toString());
        height = Double.parseDouble(heightIn.getText().toString());
        double bmi = (weight / (height * height));
        String result = String.format("%.2f", bmi);
        Log.d("MyActivity", result);
        BmiResult.setText(result, TextView.BufferType.NORMAL);
    }
}

XML File:

<LinearLayout xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}" >

<TextView
    android:id="@+id/HeightInput1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/HeightInput"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText
    android:id="@+id/editText1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="@string/InchesHint"
    android:inputType="numberDecimal" >

    <requestFocus />
</EditText>

<TextView
    android:id="@+id/WeightInput1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/WeightInput"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText
    android:id="@+id/editText2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="@string/PoundsHint"
    android:inputType="numberDecimal" />

<Button
    android:id="@+id/CalculateButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="calculateBMI"
    android:text="@string/CalculateButton" />

<TextView
    android:id="@+id/BmiResult"
    android:layout_width="100dp"
    android:layout_height="0dp"
    android:layout_weight="0.00"
    android:text="@string/BmiResult" />

Upvotes: 0

Views: 3941

Answers (6)

Sainath Patwary karnate
Sainath Patwary karnate

Reputation: 3195

  1. There are two possibilities, HeightInput1 id component should be Edit text not a text view
  2. else In code change the Edit text to Text view whose id is HeightInput1

so change java code with this

    heightIn = (TextView) findViewById (R.id.HeightInput1);  
    weightIn = (TextView) findViewById (R.id.WeightInput1);

else change in xml file with this

  <EditText
   android:id="@+id/HeightInput1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="@string/HeightInput"
   android:textAppearance="?android:attr/textAppearanceMedium" />

Upvotes: 1

geonz
geonz

Reputation: 304

 heightIn = (EditText) findViewById (R.id.HeightInput1);

Here you mentioned heightIn as EditTect and in your layout.xml it is as TextView,
instead of finding "HeightInput1" which is just your text to label, it should find the EditText

 heightIn = (EditText) findViewById (R.id.EditText1);   

same with the weight input... good luck!

Upvotes: 1

M D
M D

Reputation: 47807

Your heightIn is not EditText and you're trying to cast it as EditText so you got Error

java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.EditText at com.example.bmicalculator.MainActivity.initializeApp(MainActivity.java.32)

so do as,

heightIn = (TextView) findViewById (R.id.HeightInput1);
weightIn = (TextView) findViewById (R.id.WeightInput1);

Upvotes: 4

duggu
duggu

Reputation: 38409

in java file

heightIn = (EditText) findViewById (R.id.HeightInput1);

and

in xml file

<TextView
    android:id="@+id/HeightInput1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/HeightInput"
    android:textAppearance="?android:attr/textAppearanceMedium" />

So change according to your requirement.

Upvotes: 2

Amy
Amy

Reputation: 4032

In Xml file you are declare as TextView and you are trying to parse TextView to EditText that's why you are getting an Exception.

Change EditText Variable

private EditText heightIn;
private EditText weightIn;

To

private TextView heightIn;
private TextView weightIn;

And replace your initializeApp() function with:

private void initializeApp() {
    heightIn = (TextView) findViewById (R.id.HeightInput1);
    weightIn = (TextView) findViewById (R.id.WeightInput1);
    CalculateButton = (Button) findViewById (R.id.CalculateButton);
    BmiResult = (EditText) findViewById (R.id.BmiResult);

}

Upvotes: 1

Krupa Patel
Krupa Patel

Reputation: 3359

Change this:

<TextView
    android:id="@+id/HeightInput1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/HeightInput"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<TextView
    android:id="@+id/WeightInput1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/WeightInput"
    android:textAppearance="?android:attr/textAppearanceMedium" />

Via

<EditText
    android:id="@+id/HeightInput1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/HeightInput"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText
    android:id="@+id/WeightInput1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/WeightInput"
    android:textAppearance="?android:attr/textAppearanceMedium" />

OR

heightIn = (EditText) findViewById (R.id.HeightInput1);
weightIn = (EditText) findViewById (R.id.WeightInput1);

via

heightIn = (TextView) findViewById (R.id.HeightInput1);
weightIn = (TextView) findViewById (R.id.WeightInput1);

Upvotes: 2

Related Questions