5

I have this code in my activity

public class RegisterActivity extends AppCompatActivity {


private static final String TAG = RegisterActivity.class.getSimpleName();
private TextInputLayout mDisplayName;
private TextInputLayout mEmail;
private TextInputLayout mPassword;
private Button mCreateBtn;

private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);

    mAuth = FirebaseAuth.getInstance();

    mDisplayName = (TextInputLayout)findViewById(R.id.reg_display_name);
    mEmail = (TextInputLayout)findViewById(R.id.reg_email);
    mPassword = (TextInputLayout)findViewById(R.id.reg_password);
    mCreateBtn = (Button) findViewById(R.id.reg_create_btn);

    mCreateBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String displayName = mDisplayName.getEditText().getText().toString();
            String email = mEmail.getEditText().getText().toString();
            String password = mPassword.getEditText().getText().toString();

            registerUser(displayName,email,password);

        }


    });
}

private void registerUser(String displayName, String email, String password) {

   mAuth.signInWithEmailAndPassword(email,password)
           .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
               @Override
               public void onComplete(@NonNull Task<AuthResult> task) {
                     if(task.isSuccessful()){
                         Intent mainIntent = new Intent(RegisterActivity.this,MainActivity.class);
                         startActivity(mainIntent);
                         finish();
                     }else{
                         Toast.makeText(RegisterActivity.this,"You got some error.",Toast.LENGTH_SHORT).show();
                     }
               }
           });

}


}

Its corresponding XML code is:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".RegisterActivity">
    
    <android.support.design.widget.TextInputLayout
        android:id="@+id/textInputLayout2"
        android:layout_width="368dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">
        
        <android.support.design.widget.TextInputEditText
            android:id="@+id/reg_display_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="hint"
            android:text="Display name" />
    </android.support.design.widget.TextInputLayout>
    
    <android.support.design.widget.TextInputLayout
        android:id="@+id/textInputLayout3"
        android:layout_width="368dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textInputLayout2">

        <android.support.design.widget.TextInputEditText
            android:id="@+id/reg_email"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="hint"
            android:text="Email" />
    </android.support.design.widget.TextInputLayout>
    
    <android.support.design.widget.TextInputLayout
        android:id="@+id/textInputLayout4"
        android:layout_width="368dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textInputLayout3">
    
        <android.support.design.widget.TextInputEditText
            android:id="@+id/reg_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="hint"
            android:text="Password" />
    </android.support.design.widget.TextInputLayout>

    <Button
        android:id="@+id/reg_create_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="Create account"
        android:textAllCaps="false"
        app:layout_constraintTop_toBottomOf="@+id/textInputLayout4"
        tools:layout_editor_absoluteX="255dp" />
</android.support.constraint.ConstraintLayout>

When I run the app though I get this message:

Caused by: java.lang.ClassCastException: android.support.design.widget.TextInputEditText cannot be cast to android.support.design.widget.TextInputLayout

I am also giving you the gradle file just in case there is something wrong with the design version.

 apply plugin: 'com.android.application'

 android {
 compileSdkVersion 27
 defaultConfig {
    applicationId "theo.tziomakas.lapitchat"
    minSdkVersion 21
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner 
    "android.support.test.runner.AndroidJUnitRunner"
  }
   buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
   }
}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support.constraint:constraint- 
layout:1.1.0'
implementation 'com.google.firebase:firebase-auth:11.6.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 
'com.android.support.test.espresso:espresso-core:3.0.2'
 }

 apply plugin: 'com.google.gms.google-services'

So any ideas how to fix that exception?

Thanks Theo.

Frans
  • 3,670
  • 1
  • 31
  • 29
Theo
  • 3,099
  • 12
  • 53
  • 94

7 Answers7

9

Try to convert to

private TextInputEditText mDisplayName;
private TextInputEditText mEmail;
private TextInputEditText mPassword;


mDisplayName = (TextInputEditText)findViewById(R.id.reg_display_name);
mEmail = (TextInputEditText)findViewById(R.id.reg_email);
mPassword = (TextInputEditText)findViewById(R.id.reg_password);
Tung Tran
  • 2,885
  • 2
  • 17
  • 24
  • It won't work. getEditText() can't be found in String displayName = mDisplayName.getEditText().getText().toString() ... – Theo May 03 '18 at 08:40
  • 1
    `mDisplayName` is a `TextInputEditText`, so Replace to `mDisplayName.getText().toString()` – Tung Tran May 03 '18 at 08:55
1

Try this:

public class RegisterActivity extends AppCompatActivity {


private static final String TAG = RegisterActivity.class.getSimpleName();
private TextInputEditText mDisplayName;
private TextInputEditText mEmail;
private TextInputEditText mPassword;
private Button mCreateBtn;

private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);

    mAuth = FirebaseAuth.getInstance();

    mDisplayName = (TextInputEditText)findViewById(R.id.reg_display_name);
    mEmail = (TextInputEditText)findViewById(R.id.reg_email);
    mPassword = (TextInputEditText)findViewById(R.id.reg_password);
    mCreateBtn = (Button) findViewById(R.id.reg_create_btn);

    mCreateBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String displayName = mDisplayName.getEditText().getText().toString();
            String email = mEmail.getEditText().getText().toString();
            String password = mPassword.getEditText().getText().toString();

            registerUser(displayName,email,password);

        }


    });
}

private void registerUser(String displayName, String email, String password) {

   mAuth.signInWithEmailAndPassword(email,password)
           .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
               @Override
               public void onComplete(@NonNull Task<AuthResult> task) {
                     if(task.isSuccessful()){
                         Intent mainIntent = new Intent(RegisterActivity.this,MainActivity.class);
                         startActivity(mainIntent);
                         finish();
                     }else{
                         Toast.makeText(RegisterActivity.this,"You got some error.",Toast.LENGTH_SHORT).show();
                     }
               }
           });

}


}
Cao Minh Vu
  • 1,900
  • 1
  • 16
  • 21
1

You are trying to bind TextInputEditText id with TextInputLayout class in java file. Make sure you bind the id's with same kind of Widgets and class names.

In java file make that declare the variables with TextInputEditText instead TextInputLayout

private TextInputEditText mDisplayName;
private TextInputEditText mEmail; 
private TextInputEditText mPassword;

and in casting make TextInputLayout to TextInputEditText

mDisplayName = (TextInputEditText)findViewById(R.id.reg_display_name);
mEmail = (TextInputEditText)findViewById(R.id.reg_email);
mPassword = (TextInputEditText)findViewById(R.id.reg_password);
Karthik
  • 1,088
  • 6
  • 17
1

Create another id for TextInputEditText use that for your references

<com.google.android.material.textfield.TextInputLayout
  style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        android:id="@+id/textEmail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="100dp"
        app:boxStrokeColor="@color/purple_700"
        app:boxCornerRadiusTopEnd="100dp"
        app:boxCornerRadiusBottomStart="100dp"
        app:boxCornerRadiusBottomEnd="100dp"
        app:boxCornerRadiusTopStart="100dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">
        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/textEditEmail"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/email" />
</com.google.android.material.textfield.TextInputLayout>
TextInputEditText textEmail = (TextInputEditText)findViewById(R.id.textEditEmail);
0

I fixed the problem after changing all the IDs of the TextInputLayouyt.

0

I adopted the same way and changed all the IDs of all fields and the problem get solved

Babar Ali
  • 1
  • 2
0

Cut ID form textInputEditText and paste into TextInputLayout

<com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        android:hint="Username"
        android:textColorHint="@color/black"
        app:boxStrokeColor="@color/black"
        app:boxStrokeWidthFocused="2dp"
        app:endIconTint="@color/black"
        app:hintTextColor="@color/black"
        app:endIconMode="clear_text"
        app:startIconTint="@color/black"
        android:id="@+id/signup_username_editText"
        >

        <com.google.android.material.textfield.TextInputEditText
           
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:inputType="text"
            android:textColor="@color/black"
            android:textCursorDrawable="@null" />
    </com.google.android.material.textfield.TextInputLayout>