У меня проблема при попытке получить доступ к кнопке или AppCompatEditText

Я пытаюсь получить доступ к кнопке или AppCompatEditText с помощью функции findViewById()

Код Котлина:

package com.example.qrecycle

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.WindowManager
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
import androidx.appcompat.widget.AppCompatEditText

class RegisterActivity : AppCompatActivity() {

//    val fullNameInput        : AppCompatEditText = findViewById(R.id.editTextFullName)
//    val emailInput           : AppCompatEditText = findViewById(R.id.editTextEmail)
//    val passwordInput        : AppCompatEditText = findViewById(R.id.editTextPassword)
//    val confirmPasswordInput : AppCompatEditText = findViewById(R.id.editTextConfirmPassword)
    override fun onCreate(savedInstanceState: Bundle?) {

        val registerBtn : Button = findViewById(R.id.registerBtn)

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_register)

        @Suppress("DEPRECATION")
        window.setFlags(
            WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN
        )

//        Toast.makeText(this, "I WORK!!", Toast.LENGTH_SHORT).show()

        registerBtn.setOnClickListener {
            Toast.makeText(this, "I work", Toast.LENGTH_SHORT).show()
        }

    }

}

XML-код:

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout 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:orientation = "vertical"
    android:gravity = "center"
    android:background = "@drawable/background_gradient"
    tools:context = ".RegisterActivity">

    <TextView
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:gravity = "center"
        android:paddingTop = "20dp"
        android:paddingBottom = "20dp"
        android:layout_marginTop = "10dp"
        android:layout_marginBottom = "10dp"
        android:fontFamily = "@font/montserrat_alternates"
        android:text = "@string/registerMsg"
        android:textSize = "30sp"
        android:textStyle = "bold"
        android:textColor = "@color/white" />

    <androidx.cardview.widget.CardView
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:layout_marginStart = "20dp"
        android:layout_marginEnd = "20dp"
        android:elevation = "20dp"
        app:cardBackgroundColor = "@color/backgroundColor"
        app:cardCornerRadius = "25dp" >
        
        <LinearLayout
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:orientation = "vertical"
            android:gravity = "center" >

            <com.google.android.material.textfield.TextInputLayout
                android:layout_width = "match_parent"
                android:layout_height = "wrap_content"
                android:layout_marginStart = "20dp"
                android:layout_marginEnd = "20dp"
                android:layout_marginTop = "20dp"
                android:hint = "@string/fullNameText"
                app:endIconMode = "clear_text"
                android:textColorHint = "@color/blackWithLowerOpacity"
                app:boxBackgroundMode = "none">

                <androidx.appcompat.widget.AppCompatEditText
                    android:id = "@+id/editTextFullName"
                    android:layout_width = "match_parent"
                    android:layout_height = "wrap_content"
                    android:layout_margin = "8dp"
                    android:background = "@drawable/shape_edit_text_rounded"
                    android:gravity = "start"
                    android:inputType = "textCapWords"
                    android:textSize = "18sp"
                    tools:ignore = "SpeakableTextPresentCheck,VisualLintTextFieldSize" />
            </com.google.android.material.textfield.TextInputLayout>

            <com.google.android.material.textfield.TextInputLayout
                android:layout_width = "match_parent"
                android:layout_height = "wrap_content"
                android:layout_marginStart = "20dp"
                android:layout_marginEnd = "20dp"
                android:hint = "@string/emailText"
                app:endIconMode = "clear_text"
                android:textColorHint = "@color/blackWithLowerOpacity"
                app:boxBackgroundMode = "none" >

                <androidx.appcompat.widget.AppCompatEditText
                    android:id = "@+id/editTextEmail"
                    android:layout_width = "match_parent"
                    android:layout_height = "wrap_content"
                    android:layout_margin = "8dp"
                    android:background = "@drawable/shape_edit_text_rounded"
                    android:gravity = "start"
                    android:inputType = "textEmailAddress"
                    android:textSize = "18sp"
                    tools:ignore = "SpeakableTextPresentCheck,VisualLintTextFieldSize" />
            </com.google.android.material.textfield.TextInputLayout>

            <com.google.android.material.textfield.TextInputLayout
                android:layout_width = "match_parent"
                android:layout_height = "wrap_content"
                android:layout_marginStart = "20dp"
                android:layout_marginEnd = "20dp"
                android:hint = "@string/passwordText"
                app:endIconMode = "clear_text"
                android:textColorHint = "@color/blackWithLowerOpacity"
                app:boxBackgroundMode = "none" >

                <androidx.appcompat.widget.AppCompatEditText
                    android:id = "@+id/editTextPassword"
                    android:layout_width = "match_parent"
                    android:layout_height = "wrap_content"
                    android:layout_margin = "8dp"
                    android:background = "@drawable/shape_edit_text_rounded"
                    android:gravity = "start"
                    android:inputType = "textPassword"
                    android:textSize = "18sp"
                    tools:ignore = "SpeakableTextPresentCheck,VisualLintTextFieldSize" />
            </com.google.android.material.textfield.TextInputLayout>

            <com.google.android.material.textfield.TextInputLayout
                android:layout_width = "match_parent"
                android:layout_height = "wrap_content"
                android:layout_marginStart = "20dp"
                android:layout_marginEnd = "20dp"
                android:layout_marginBottom = "20dp"
                android:hint = "@string/confirmPasswordText"
                app:endIconMode = "clear_text"
                android:textColorHint = "@color/blackWithLowerOpacity"
                app:boxBackgroundMode = "none" >

                <androidx.appcompat.widget.AppCompatEditText
                    android:id = "@+id/editTextConfirmPassword"
                    android:layout_width = "match_parent"
                    android:layout_height = "wrap_content"
                    android:layout_margin = "8dp"
                    android:background = "@drawable/shape_edit_text_rounded"
                    android:gravity = "start"
                    android:inputType = "textPassword"
                    android:textSize = "18sp"
                    tools:ignore = "SpeakableTextPresentCheck,VisualLintTextFieldSize" />
            </com.google.android.material.textfield.TextInputLayout>

            <Button
                android:id = "@+id/registerBtn"
                android:layout_width = "match_parent"
                android:layout_height = "wrap_content"
                android:layout_marginStart = "30dp"
                android:layout_marginEnd = "30dp"
                android:layout_marginTop = "10dp"
                android:layout_marginBottom = "40dp"
                android:background = "@drawable/shape_button_dark_blue_rounded"
                android:fontFamily = "@font/lobster"
                android:letterSpacing = ".05"
                android:textSize = "22sp"
                android:text = "@string/registerBtnText"
                android:textColor = "@color/white"
                android:textAllCaps = "false"
                tools:ignore = "VisualLintButtonSize" />

        </LinearLayout>

    </androidx.cardview.widget.CardView>

</LinearLayout>

Когда я пытаюсь запустить свое приложение и перейти к этому действию, приложение падает, и я получаю эту ошибку:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.qrecycle, PID: 14505
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.qrecycle/com.example.qrecycle.RegisterActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3682)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3942)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:109)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2345)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loopOnce(Looper.java:233)
        at android.os.Looper.loop(Looper.java:344)
        at android.app.ActivityThread.main(ActivityThread.java:8212)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
        at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:191)
        at android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:174)
        at android.content.Context.obtainStyledAttributes(Context.java:804)
        at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:922)
        at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:889)

        at androidx.appcompat.app.AppCompatDelegateImpl.findViewById(AppCompatDelegateImpl.java:691)
        at androidx.appcompat.app.AppCompatActivity.findViewById(AppCompatActivity.java:264)
        at com.example.qrecycle.RegisterActivity.<init>(RegisterActivity.kt:13)
        at java.lang.Class.newInstance(Native Method)
        at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
        at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1288)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3669)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3942) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:109) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2345) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loopOnce(Looper.java:233) 
        at android.os.Looper.loop(Looper.java:344) 
        at android.app.ActivityThread.main(ActivityThread.java:8212) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034) 
I/Process: Sending signal. PID: 14505 SIG: 9

Я также получаю сообщение:

V/AutofillManager: requestHideFillUi(null): anchor = null
V/AutofillManager: requestHideFillUi(null): anchor = null
V/TextView: notifyAutoFillManagerAfterTextChanged
V/AutofillManager: notifyValueChanged(1073741824): ignoring on state UNKNOWN

много раз

Я новичок в разработке для Android, поэтому любые комментарии по улучшению моего кода приветствуются.

Я пробовал это:

  • private lateinit val fullNameInput : AppCompatEditText
    
    val fullNameInputString = fullNameInput.text.toString() 
    
  • val fullNameInput : AppCompatEditText = findViewById(R.id.editTextFullName)
    
  • private val fullNameInput : AppCompatEditText = findViewById(R.id.editTextFullName)
    
0
0
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что вы пытаетесь получить доступ к элементам пользовательского интерфейса, принадлежащим классу View, перед вызовом метода setContentView(). Вы можете выполнить любой код, который вы хотите, перед методом setContentView(), только он не относится к (частям) представления, которое еще не установлено. Поэтому попробуйте использовать метод «findViewById()» после вызова «setContentView()».

Я попробовал ваше решение, но у меня точно такая же проблема. Спасибо

George_Sari 09.04.2023 17:33

Убедитесь, что RegisterActivity правильно объявлен в файле манифеста с правильным именем пакета и именем действия.

Zapbroob 09.04.2023 18:08

после отладки с комментированием переменных я обнаружил, что эта проблема возникает только тогда, когда переменная emailTextInput раскомментирована, и я до сих пор не понял, почему это происходит

George_Sari 09.04.2023 18:19

Другие вопросы по теме