【问题标题】:App Closes When Directing Towards A Fragment On Button Click按钮单击时指向片段时应用程序关闭
【发布时间】:2022-01-05 08:19:11
【问题描述】:

所以我有一个称为 LoginHomeFragment 的片段,其中包含指向我的应用程序的 2 个片段的按钮,RegisterFragment 和 LoginFragment RegisterFragment 的按钮单击效果很好 但是当点击 LoginFragment 按钮时,应用程序会自动关闭。 当我从我的 RegisterFragment 重定向到 LoginFragment 时,情况也是如此。 我的应用程序的代码如下:-

LoginHomeFragment.kt

class LoginHomeFragment : Fragment() {

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    var view = inflater.inflate(R.layout.fragment_login_home, container, false)

    view.findViewById<Button>(R.id.btn_dir_register).setOnClickListener {
        var navRegister = activity as FragmentNavigation
        navRegister.navigateFrag(RegisterFragment(), false)
    }

    view.findViewById<Button>(R.id.btn_dir_login).setOnClickListener {
        var navRegister = activity as FragmentNavigation
        navRegister.navigateFrag(LoginFragment(), false)
    }

    return view
}
}

LoginFragment.kt

class LoginFragment : Fragment() {
private lateinit var username: EditText
private lateinit var password: EditText
private lateinit var forgot: EditText
private lateinit var fAuth: FirebaseAuth

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    val view =  inflater.inflate(R.layout.fragment_login, container, false)

    username = view.findViewById(R.id.log_username)
    password = view.findViewById(R.id.log_password)
    fAuth = Firebase.auth
    forgot = view.findViewById(R.id.forgot_pwd)

    view.findViewById<Button>(R.id.btn_register).setOnClickListener {
        val navRegister = activity as FragmentNavigation
        navRegister.navigateFrag(RegisterFragment(), false)
    }

    view.findViewById<Button>(R.id.btn_login).setOnClickListener {
        validateForm()
    }

    forgot.setOnClickListener {
        forgotpassword()
    }

    return view
}

private fun forgotpassword() {
    val icon = AppCompatResources.getDrawable(requireContext(), R.drawable.ic_warning)

    icon?.setBounds(0, 0, icon.intrinsicWidth, icon.intrinsicHeight)
    when {
        TextUtils.isEmpty(username.text.toString().trim()) -> {
            username.setError("Please Enter Your Registered Email-Id", icon)
        }

        username.text.toString().isNotEmpty() -> {
            if (username.text.toString().matches(Regex("[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+"))) {
                Firebase.auth.sendPasswordResetEmail(username.text.toString())
                    .addOnCompleteListener { task ->
                        if (task.isSuccessful) {
                            Log.d(TAG, "Password reset email sent.")
                        } else {
                            Toast.makeText(context, task.exception?.message, Toast.LENGTH_SHORT).show()
                        }
                    }
            } else {
                username.setError("Please enter valid email-id.", icon)
            }
        }
    }
}

private fun validateForm() {
    val icon = AppCompatResources.getDrawable(requireContext(),R.drawable.ic_warning)

    icon?.setBounds(0,0,icon.intrinsicWidth,icon.intrinsicHeight)
    when{
        TextUtils.isEmpty(username.text.toString().trim())->{
            username.setError("Please Enter Username", icon)
            btn_register_reg.isEnabled = false
        }
        TextUtils.isEmpty(password.text.toString().trim())->{
            password.setError("Please Enter Password", icon)
            btn_register_reg.isEnabled = false
        }

        username.text.toString().isNotEmpty() &&
                password.text.toString().isNotEmpty() -> {

            if (username.text.toString().matches(Regex("[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+"))) {
                firebaseSignIn()
            } else {
                username.setError("Please enter valid email-id.", icon)
            }
        }
    }
}

private fun firebaseSignIn() {
    btn_login.isEnabled = false
    btn_login.alpha = 0.5f
    fAuth.signInWithEmailAndPassword(username.text.toString(), password.text.toString())
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Toast.makeText(context, "Login Successful", Toast.LENGTH_SHORT).show()
                    activity?.let {
                        val intent = Intent(it, HomeActivity::class.java)
                        it.startActivity(intent)
                    }
            } else {
                btn_login.isEnabled = true
                btn_login.alpha = 1f
                Toast.makeText(context, task.exception?.message, Toast.LENGTH_SHORT).show()
            }
        }
}
}

fragment_login.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".LoginFragment">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:focusableInTouchMode="true"
    android:orientation="vertical">

    <ImageView
        android:layout_width="70dp"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:layout_marginTop="90dp" />
    <!-- TODO add the image -->

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="MedDrone"
        android:textColor="#000"
        android:textSize="15dp"
        android:layout_marginTop="11dp" />

    <com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Email"
        app:boxBackgroundColor="#F8E9FD"
        android:layout_marginTop="50dp"
        android:layout_marginStart="40dp"
        android:layout_marginEnd="40dp">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/log_username"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </com.google.android.material.textfield.TextInputLayout>

    <com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Password"
        app:boxBackgroundColor="#F8E9FD"
        android:layout_marginTop="10dp"
        android:layout_marginStart="40dp"
        android:layout_marginEnd="40dp">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/log_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPassword"/>

    </com.google.android.material.textfield.TextInputLayout>

    <com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:boxBackgroundColor="#F8E9FD"
        android:layout_marginTop="10dp"
        android:layout_marginStart="40dp"
        android:layout_marginEnd="40dp">

        <com.google.android.material.textview.MaterialTextView
            android:id="@+id/forgot_pwd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Forgot Password?"
            android:textColor="@color/zm_red"/>

    </com.google.android.material.textfield.TextInputLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp">

        <com.google.android.material.button.MaterialButton
            android:id="@+id/btn_login"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_marginEnd="40dp"
            android:text="Login" />

        <com.google.android.material.button.MaterialButton
            android:id="@+id/btn_register"
            style="@style/Widget.MaterialComponents.Button.TextButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="40dp"
            android:layout_toLeftOf="@+id/btn_login"
            android:text="Register" />

    </RelativeLayout>

</LinearLayout>

</ScrollView>

LogCat

2022-01-05 17:12:47.303 19721-19721/com.rgoel.meddrone E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.rgoel.meddrone, PID: 19721
java.lang.ClassCastException: com.google.android.material.textview.MaterialTextView cannot be cast to android.widget.EditText
    at com.rgoel.meddrone.LoginFragment.onCreateView(LoginFragment.kt:38)
    at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963)
    at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518)
    at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
    at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
    at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100)
    at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
    at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
    at android.os.Handler.handleCallback(Handler.java:938)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:254)
    at android.app.ActivityThread.main(ActivityThread.java:8231)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1006)

【问题讨论】:

  • 请同时包含崩溃日志,以便更快地识别错误。
  • 你检查错误日志了吗?在此处发布应用错误日志。
  • 我没有找到任何错误日志...请确认...
  • 告诉我怎么才能找到它??不知道如何...应用程序在我的物理设备上的实现中崩溃...

标签: android xml kotlin authentication fragment


【解决方案1】:

答案:-

LoginFragment.kt

class LoginFragment : Fragment() {
private lateinit var username: EditText
private lateinit var password: EditText
private lateinit var fAuth: FirebaseAuth

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    val view =  inflater.inflate(R.layout.fragment_login, container, false)

    username = view.findViewById(R.id.log_username)
    password = view.findViewById(R.id.log_password)
    fAuth = Firebase.auth

    view.findViewById<Button>(R.id.btn_register).setOnClickListener {
        val navRegister = activity as FragmentNavigation
        navRegister.navigateFrag(RegisterFragment(), false)
    }

    view.findViewById<Button>(R.id.btn_login).setOnClickListener {
        validateForm()
    }


    view.findViewById<TextView>(R.id.forgot_pwd).setOnClickListener {
        forgotpassword()
    }

    return view
}

private fun forgotpassword() {
    val icon = AppCompatResources.getDrawable(requireContext(), R.drawable.ic_warning)

    icon?.setBounds(0, 0, icon.intrinsicWidth, icon.intrinsicHeight)
    when {
        TextUtils.isEmpty(username.text.toString().trim()) -> {
            username.setError("Please Enter Your Registered Email-Id", icon)
        }

        username.text.toString().isNotEmpty() -> {
            if (username.text.toString().matches(Regex("[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+"))) {
                Firebase.auth.sendPasswordResetEmail(username.text.toString())
                    .addOnCompleteListener { task ->
                        if (task.isSuccessful) {
                            Log.d(TAG, "Password reset email sent.")
                        } else {
                            Toast.makeText(context, task.exception?.message, Toast.LENGTH_SHORT).show()
                        }
                    }
            } else {
                username.setError("Please enter valid email-id.", icon)
            }
        }
    }
}

private fun validateForm() {
    val icon = AppCompatResources.getDrawable(requireContext(),R.drawable.ic_warning)

    icon?.setBounds(0,0,icon.intrinsicWidth,icon.intrinsicHeight)
    when{
        TextUtils.isEmpty(username.text.toString().trim())->{
            username.setError("Please Enter Username", icon)
            btn_register_reg.isEnabled = false
        }
        TextUtils.isEmpty(password.text.toString().trim())->{
            password.setError("Please Enter Password", icon)
            btn_register_reg.isEnabled = false
        }

        username.text.toString().isNotEmpty() &&
                password.text.toString().isNotEmpty() -> {

            if (username.text.toString().matches(Regex("[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+"))) {
                firebaseSignIn()
            } else {
                username.setError("Please enter valid email-id.", icon)
            }
        }
    }
}

private fun firebaseSignIn() {
    btn_login.isEnabled = false
    btn_login.alpha = 0.5f
    fAuth.signInWithEmailAndPassword(username.text.toString(), password.text.toString())
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Toast.makeText(context, "Login Successful", Toast.LENGTH_SHORT).show()
                    activity?.let {
                        val intent = Intent(it, HomeActivity::class.java)
                        it.startActivity(intent)
                    }
            } else {
                btn_login.isEnabled = true
                btn_login.alpha = 1f
                Toast.makeText(context, task.exception?.message, Toast.LENGTH_SHORT).show()
            }
        }
}
}

fragment_login.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".LoginFragment">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:focusableInTouchMode="true"
    android:orientation="vertical">

    <ImageView
        android:layout_width="70dp"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:layout_marginTop="90dp" />
    <!-- TODO add the image -->

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="MedDrone"
        android:textColor="#000"
        android:textSize="15dp"
        android:layout_marginTop="11dp" />

    <com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Email"
        app:boxBackgroundColor="#F8E9FD"
        android:layout_marginTop="50dp"
        android:layout_marginStart="40dp"
        android:layout_marginEnd="40dp">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/log_username"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </com.google.android.material.textfield.TextInputLayout>

    <com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Password"
        app:boxBackgroundColor="#F8E9FD"
        android:layout_marginTop="10dp"
        android:layout_marginStart="40dp"
        android:layout_marginEnd="40dp">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/log_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPassword"/>

    </com.google.android.material.textfield.TextInputLayout>

    <TextView
        android:id="@+id/forgot_pwd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="-25dp"
        android:layout_marginTop="10dp"
        android:layout_marginEnd="80dp"
        android:text="Forgot Password?"
        android:textColor="@color/zm_red"
        android:textSize="15dp"/>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp">

        <com.google.android.material.button.MaterialButton
            android:id="@+id/btn_login"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_marginEnd="40dp"
            android:text="Login" />

        <com.google.android.material.button.MaterialButton
            android:id="@+id/btn_register"
            style="@style/Widget.MaterialComponents.Button.TextButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="40dp"
            android:layout_toLeftOf="@+id/btn_login"
            android:text="Register" />

    </RelativeLayout>

</LinearLayout>

</ScrollView>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    相关资源
    最近更新 更多