Я пытаюсь получить доступ к кнопке или 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)
Проблема в том, что вы пытаетесь получить доступ к элементам пользовательского интерфейса, принадлежащим классу View, перед вызовом метода setContentView(). Вы можете выполнить любой код, который вы хотите, перед методом setContentView(), только он не относится к (частям) представления, которое еще не установлено. Поэтому попробуйте использовать метод «findViewById()» после вызова «setContentView()».
Убедитесь, что RegisterActivity правильно объявлен в файле манифеста с правильным именем пакета и именем действия.
после отладки с комментированием переменных я обнаружил, что эта проблема возникает только тогда, когда переменная emailTextInput раскомментирована, и я до сих пор не понял, почему это происходит
Я попробовал ваше решение, но у меня точно такая же проблема. Спасибо