Jestem nowy w Androidzie, korzystałem z samouczka i w tym momencie aplikacja zawiesza się, gdy klikam przycisk logowania. Kiedy uruchamiam aplikację i klikam przycisk logowania, aplikacja ulega awarii, a w logcat jest wyświetlany ten błąd java RuntimeException. To jest mój logcat, loginactivity.xml i loginactivity.java.

java.lang.RuntimeException: nie można rozpocząć działania ComponentInfo {com.example.ugtunda / com.example.ugtunda.LoginActivity}: java.lang.ClassCastException: androidx.appcompat.widget.AppCompatTextView nie można przesłać do com.rey.material. widget.TextView na android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2806) na android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2884) na android.app.ActivityThread.-wrap11 (nieznane źródło: 0) na Androida .app.ActivityThread $ H.handleMessage (ActivityThread.java:1614) na android.os.Handler.dispatchMessage (Handler.java:106) na android.os.Looper.loop (Looper.java:164) na android.app. ActivityThread.main (ActivityThread.java:6524) w java.lang.reflect.Method.invoke (metoda macierzysta) w com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:451) w com.android. internal.os .ZygoteInit.main (ZygoteInit.java:888) Przyczyna: java.lang.ClassCastException: androidx.appcompat.widget.AppCompatTextView nie może zostać przesłana do com.rey.material.widget.TextView pod adresem com.example.ugtunda.LoginActivity.onCreate (LoginActivity.java:48) pod adresem android.app.Activity.performCreate (Activity.java:7044) pod adresem android.app.Activity.performCreate (Activity.java:7035) pod adresem android.app.Instrumentation.callActivityOnCreate (Instrumentation.java: 1214) na android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2759)

Oto mój login_activity_XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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"
    android:background="@drawable/login"
    tools:context=".LoginActivity">

    <ImageView
        android:id="@+id/login_applogo"
        android:layout_width="300dp"
        android:layout_height="100dp"
        android:src="@drawable/applogo"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="200dp"
        />


    <EditText
        android:id="@+id/login_phone_number_input"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/login_applogo"
        android:background="@drawable/input_design"
        android:padding="20dp"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:hint="Phone Number"
        android:inputType="number"
        android:textColor="@color/colorPrimaryDark"
        android:textColorHint="@color/colorPrimaryDark"
        android:textSize="17sp"
        android:textStyle="bold"
        />


    <EditText
        android:id="@+id/login_password_input"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/login_phone_number_input"
        android:background="@drawable/input_design"
        android:padding="20dp"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:layout_marginTop="6dp"
        android:hint="Password"
        android:inputType="textPassword"
        android:textColor="@color/colorPrimaryDark"
        android:textColorHint="@color/colorPrimaryDark"
        android:textSize="17sp"
        android:textStyle="bold"
        />

    <LinearLayout
        android:id="@+id/linear_layout_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_below="@id/login_password_input"
        android:layout_marginTop="5dp"
        >

        <com.rey.material.widget.CheckBox
            android:id="@+id/remember_me_chkb"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@style/Material.Drawable.CheckBox"
            android:text="Remember Me"
            android:textColor="@color/colorPrimaryDark"
            app:cbd_strokeColor="@color/colorPrimaryDark"
            android:gravity="center_vertical"
            android:textSize="16sp"
            android:textStyle="bold"
            android:layout_marginLeft="17dp"

            />


        <TextView
            android:id="@+id/forget_password_link"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Forget Password"
            android:textColor="@color/colorPrimaryDark"
            android:textSize="15sp"
            android:textStyle="bold"
            android:layout_marginLeft="80dp"
            />
    </LinearLayout>


    <Button
        android:id="@+id/login_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/linear_layout_1"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:background="@drawable/buttons"
        android:padding="17dp"
        android:text="Login"
        android:textAllCaps="false"
        android:textColor="@android:color/white"
        android:textSize="18sp" />


    <TextView
        android:id="@+id/admin_panel_link"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/login_button"
        android:layout_alignParentEnd="true"
        android:layout_marginLeft="80dp"
        android:layout_marginEnd="23dp"
        android:text="I'm an Admin"
        android:textAppearance="@android:style/TextAppearance.Material.Small"
        android:textColor="@color/colorPrimaryDark"
        android:textSize="20sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/not_admin_panel_link"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="I'm not an Admin"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/login_button"
        android:textColor="@color/colorPrimaryDark"
        android:textSize="20sp"
        android:textStyle="bold"
        android:layout_marginLeft="80dp"
        android:layout_marginEnd="23dp"
        android:layout_marginStart="25dp"
        android:visibility="invisible"
        />

</RelativeLayout>

I na koniec mój loginactivity.java

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.example.ugtunda.Models.Users;
import com.example.ugtunda.Prevalent.Prevalent;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.rey.material.widget.CheckBox;
import com.rey.material.widget.TextView;

import io.paperdb.Paper;

public class LoginActivity extends AppCompatActivity
{
    private EditText InputPhoneNumber, InputPassword;
    private Button LoginButton;
    private ProgressDialog loadingBar;
    private TextView AdminLink, NotAdminLink;

    private String parentDbName = "Users";
    private CheckBox chkBoxRememberMe;


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


        LoginButton = findViewById(R.id.login_button);
        InputPassword = findViewById(R.id.login_password_input);
        InputPhoneNumber = findViewById(R.id.login_phone_number_input);
        AdminLink = findViewById(R.id.admin_panel_link);
        NotAdminLink = findViewById(R.id.not_admin_panel_link);
        loadingBar = new ProgressDialog(this);


        chkBoxRememberMe = findViewById(R.id.remember_me_chkb);
        Paper.init(this);


        LoginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view)
            {
                LoginUser();
            }
        });

        AdminLink.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view)
            {
                LoginButton.setText("Login Admin");
                AdminLink.setVisibility(View.INVISIBLE);
                NotAdminLink.setVisibility(View.VISIBLE);
                parentDbName = "Admins";
            }
        });

        NotAdminLink.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view)
            {
                LoginButton.setText("Login");
                AdminLink.setVisibility(View.VISIBLE);
                NotAdminLink.setVisibility(View.INVISIBLE);
                parentDbName = "Users";
            }
        });
    }



    private void LoginUser()
    {
        String phone = InputPhoneNumber.getText().toString();
        String password = InputPassword.getText().toString();

        if (TextUtils.isEmpty(phone))
        {
            Toast.makeText(this, "Please write your phone number...", Toast.LENGTH_SHORT).show();
        }
        else if (TextUtils.isEmpty(password))
        {
            Toast.makeText(this, "Please write your password...", Toast.LENGTH_SHORT).show();
        }
        else
        {
            loadingBar.setTitle("Login Account");
            loadingBar.setMessage("Please wait, while we are checking the credentials.");
            loadingBar.setCanceledOnTouchOutside(false);
            loadingBar.show();


            AllowAccessToAccount(phone, password);
        }
    }



    private void AllowAccessToAccount(final String phone, final String password)
    {
        if(chkBoxRememberMe.isChecked())
        {
            Paper.book().write(Prevalent.USER_PHONE_KEY, phone);
            Paper.book().write(Prevalent.USER_PASSWORD_KEY, password);
        }


        final DatabaseReference RootRef;
        RootRef = FirebaseDatabase.getInstance().getReference();


        RootRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot)
            {
                if (dataSnapshot.child(parentDbName).child(phone).exists())
                {
                    Users usersData = dataSnapshot.child(parentDbName).child(phone).getValue(Users.class);

                    if (usersData.getPhone().equals(phone))
                    {
                        if (usersData.getPassword().equals(password))
                        {
                            if (parentDbName.equals("Admins"))
                            {
                                Toast.makeText(LoginActivity.this, "Welcome Admin, you are logged in Successfully...", Toast.LENGTH_SHORT).show();
                                loadingBar.dismiss();

                                Intent intent = new Intent(LoginActivity.this, AdminCategoryActivity.class);
                                startActivity(intent);
                            }
                            else if (parentDbName.equals("Users"))
                            {
                                Toast.makeText(LoginActivity.this, "logged in Successfully...", Toast.LENGTH_SHORT).show();
                                loadingBar.dismiss();

                                Intent intent = new Intent(LoginActivity.this, HomeActivity.class);
                                Prevalent.currentOnlineUser = usersData;
                                startActivity(intent);
                            }
                        }
                        else
                        {
                            loadingBar.dismiss();
                            Toast.makeText(LoginActivity.this, "Password is incorrect.", Toast.LENGTH_SHORT).show();
                        }
                    }
                }
                else
                {
                    Toast.makeText(LoginActivity.this, "Account with this " + phone + " number do not exists.", Toast.LENGTH_SHORT).show();
                    loadingBar.dismiss();
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
}
0
AllanTumu 2 kwiecień 2020, 18:24

4 odpowiedzi

Najlepsza odpowiedź

Wygląda na to, że używasz przycisku AppCompat w swoim kodzie XML, ale używasz przycisku material w kodzie java.

Więc muszą być takie same.

Najpierw musisz użyć odpowiedniego importu dla dowolnego widoku, którego używasz, jeśli chcesz użyć przycisku AppCompat, a następnie importuj w ten sposób

import android.widget.Button;

Jeśli chcesz użyć przycisku Materiał, użyj tego importu:

import com.rey.material.widget.Button;

To samo dotyczy TextView.

Mam nadzieję że to pomoże!

0
UnBanned 2 kwiecień 2020, 15:46

Wygląda na to, że definiujesz standardowe komponenty Androida w układzie XML, a następnie próbujesz nadać im niestandardowe komponenty (pakiet com.rey.material). Spróbuj przejść do importu i usunąć wiersze com.rey.material. Następnie, gdy IDE prosi o zaimportowanie TextView i pola wyboru, upewnij się, że importujesz wersje z android.widget, a nie com.rey.material. Alternatywnie, możesz zmienić swój plik XML, aby określić komponenty com.rey.material, jeśli chcesz używać tych zamiast domyślnych.

2
Ian Boswell 2 kwiecień 2020, 15:33

Musisz wymienić

import com.rey.material.widget.TextView;

Z

import android.widget.TextView;

.

LUB

.

Zastąpić

<TextView
            android:id="@+id/forget_password_link"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Forget Password"
            android:textColor="@color/colorPrimaryDark"
            android:textSize="15sp"
            android:textStyle="bold"
            android:layout_marginLeft="80dp"
            />

Z

<com.rey.material.widget.TextView
            android:id="@+id/forget_password_link"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Forget Password"
            android:textColor="@color/colorPrimaryDark"
            android:textSize="15sp"
            android:textStyle="bold"
            android:layout_marginLeft="80dp" />

W pliku xml

2
Marsad 2 kwiecień 2020, 15:41

Nie można przesłać androidx.appcompat.widget.AppCompatTextView do com.rey.material.widget.TextView

W swoim xml używasz SDK TextView, ale w swoim kodzie chcesz com.rey.material.widget.

-> Zmień jedną z nich

0
Bruno 2 kwiecień 2020, 15:30