Search code examples
androidradio-buttonspinnerradio-group

Android ClassCastException android.widget.TextView cannot be cast to android.widget.Spinner


I'm new to android and making an application in which i need to use spinners and radio group button values for mathematical calculation .I have tried different ways and also Google this issue but didn't succeed . Please some one help me in this. Thanks.

Logcat Error: ClassCastException: android.widget.TextView cannot be cast to android.widget.Spinner

Here is my code:

main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Gender"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView2"
    android:layout_marginTop="56dp"
    android:text="Height"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<RadioGroup
    android:id="@+id/radiogender"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true" >

    <RadioButton
        android:id="@+id/rmale"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:text="Male" />

    <RadioButton
        android:id="@+id/rfemale"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Female" />
</RadioGroup>

<Spinner
    android:id="@+id/sp_feet"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/button1"
    android:layout_marginBottom="22dp"
    android:layout_toLeftOf="@+id/gender" 
    android:entries="@array/feet_values"
    android:prompt="@string/feet" />

<Spinner
    android:id="@+id/sp_inch"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/result"
    android:layout_alignTop="@+id/sp_feet"
    android:entries="@array/inch_values"
    android:prompt="@string/inch" />

<Button
    android:id="@+id/button1"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignRight="@+id/gender"
    android:layout_centerVertical="true"
    android:text="Calculate" />

<TextView
    android:id="@+id/result"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/button1"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="36dp"
    android:textAppearance="?android:attr/textAppearanceMedium" />

MainActivity.java

 package com.example.wc;

 import android.app.Activity;
 import android.os.Bundle;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 import android.widget.RadioButton;
 import android.widget.RadioGroup;
 import android.widget.Spinner;
 import android.widget.TextView;
 import android.widget.Toast;

 public class MainActivity extends Activity {
 private RadioGroup radiogendergroup;
 private RadioButton radiogenderbutton;
 private Spinner feet;
 private Spinner inch;
 private TextView res;
 private Button calculate;

 double cal;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    radiogendergroup = (RadioGroup) findViewById(R.id.radiogender);
    feet= (Spinner) findViewById(R.id.sp_feet);
    inch= (Spinner)findViewById(R.id.sp_inch);

    calculate = (Button) findViewById(R.id.button1);
    res= (TextView) findViewById(R.id.result);

    calculate.setOnClickListener(new View.OnClickListener() {
         public void onClick(View view) {
             int selectedId = radiogendergroup.getCheckedRadioButtonId();
             radiogenderbutton = (RadioButton) findViewById(selectedId);
             String selectedValue = radiogenderbutton.getText().toString();
             double f = Double.parseDouble(feet.getSelectedItem().toString());
             double i = Double.parseDouble(inch.getSelectedItem().toString());

             if(selectedValue=="Male" && f==5){

                 cal= 50 + 2.3*i;
                    String result = new Double(cal).toString();
                    res.setText(result);
             }

             if(selectedValue=="Male" && f==6){

                 cal= 77.6 + 2.3*i;
                    String result = new Double(cal).toString();
                    res.setText(result);
             }
             if(selectedValue=="Female" && f==5){

                 cal= 45.5 + 2.3*i;
                    String result = new Double(cal).toString();
                    res.setText(result);
             }               
         }
       });
}

}

LogCat Error after modification:

 07-08 12:05:09.171: E/AndroidRuntime(1213): FATAL EXCEPTION: main
 07-08 12:05:09.171: E/AndroidRuntime(1213): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.wc/com.example.wc.MainActivity}: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.Spinner
 07-08 12:05:09.171: E/AndroidRuntime(1213):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
 07-08 12:05:09.171: E/AndroidRuntime(1213):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
 07-08 12:05:09.171: E/AndroidRuntime(1213):    at android.app.ActivityThread.access$600(ActivityThread.java:123)
 07-08 12:05:09.171: E/AndroidRuntime(1213):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
 07-08 12:05:09.171: E/AndroidRuntime(1213):    at android.os.Handler.dispatchMessage(Handler.java:99)
 07-08 12:05:09.171: E/AndroidRuntime(1213):    at android.os.Looper.loop(Looper.java:137)
 07-08 12:05:09.171: E/AndroidRuntime(1213):    at android.app.ActivityThread.main(ActivityThread.java:4424)
 07-08 12:05:09.171: E/AndroidRuntime(1213):    at java.lang.reflect.Method.invokeNative(Native Method)
 07-08 12:05:09.171: E/AndroidRuntime(1213):    at java.lang.reflect.Method.invoke(Method.java:511)
 07-08 12:05:09.171: E/AndroidRuntime(1213):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
 07-08 12:05:09.171: E/AndroidRuntime(1213):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
 07-08 12:05:09.171: E/AndroidRuntime(1213):    at dalvik.system.NativeStart.main(Native Method)
 07-08 12:05:09.171: E/AndroidRuntime(1213): Caused by: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.Spinner
 07-08 12:05:09.171: E/AndroidRuntime(1213):    at com.example.wc.MainActivity.onCreate(MainActivity.java:30)
 07-08 12:05:09.171: E/AndroidRuntime(1213):    at android.app.Activity.performCreate(Activity.java:4465)
 07-08 12:05:09.171: E/AndroidRuntime(1213):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
 07-08 12:05:09.171: E/AndroidRuntime(1213):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
 07-08 12:05:09.171: E/AndroidRuntime(1213):    ... 11 more

Solution

  • There is no Logcat Error: Value No of type java.lang.String cannot be converted to JSONObject

    It seems that your issue in comparison,So use .equals() instead of == for String comparison i.e. in your code,change

    selectedValue=="Male"
    

    to

    selectedValue.equals("Male")
    

    and

    selectedValue=="Female"
    

    to

    selectedValue.equals("Female")
    

    == tests for reference equality.

    .equals() tests for value equality.

    For more info see How do I compare strings in Java?

    Edit

    Please clean your project because it may be possible that you had assign an id to TextView, R.java builds, but later you assign the same name to Spinner without building R.java.

    As R.java keeps reference of all controls, so at first time you assign to Textview so R.java consider that this id is a Textview but now you assigned it to Spinner and R.java is totally unaware until you clean and build .