我正在 Android Studio 中开发一个项目,当时我遇到了一个问题,当我尝试在真实设备上运行它时,它不断崩溃。一开始它工作得很好,但是当我使用 viewBinding 时,它停止工作并立即崩溃。
这是我不断收到的运行时错误
2024-04-05 11:11:36.978 9368-9368 AndroidRuntime usap64 E FATAL EXCEPTION: main
Process: com.example.login_act, PID: 9368
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.login_act/com.example.login_act.MainActivity}: java.lang.InstantiationException: java.lang.Class<com.example.login_act.MainActivity> cannot be instantiated
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3737)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4022)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
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:2336)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8653)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
Caused by: java.lang.InstantiationException: java.lang.Class<com.example.login_act.MainActivity> cannot be instantiated
at java.lang.Class.newInstance(Native Method)
at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:44)
at android.app.Instrumentation.newActivity(Instrumentation.java:1253)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3725)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4022)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
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:2336)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8653)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
2024-04-05 11:11:37.042 4589-4614 WindowManager system_server E win=Window{3a9cc03 u0 Splash Screen com.example.login_act EXITING} destroySurfaces: appStopped=false win.mWindowRemovalAllowed=true win.mRemoveOnExit=true win.mViewVisibility=0 caller=com.android.server.wm.ActivityRecord.destroySurfaces:5251 com.android.server.wm.ActivityRecord.destroySurfaces:5232 com.android.server.wm.WindowState.onExitAnimationDone:5654 com.android.server.wm.-$$Lambda$01bPtngJg5AqEoOWfW3rWfV7MH4.accept:2 java.util.ArrayList.forEach:1262 com.android.server.wm.ActivityRecord.onAnimationFinished:7162 com.android.server.wm.WindowContainer.doAnimationFinished:2626
这是我的MainActivity.kt
abstract class MainActivity : AppCompatActivity() , View.OnClickListener {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val username = binding.usernameTxt
val password = binding.passwordTxt
val login_btn = binding.LoginBtn
login_btn.setOnClickListener {
}
when{
TextUtils.isEmpty(username.text.toString()) ->{
Toast.makeText(applicationContext,"Please enter your username", Toast.LENGTH_SHORT).show()
}
TextUtils.isEmpty(password.text.toString()) ->{
Toast.makeText(applicationContext,"Pleas enter your password", Toast.LENGTH_SHORT).show()
}
username.toString() != "admin123" && password.toString() != "adminpass123" ->{
Toast.makeText(applicationContext,"Invalid Username and/or Password", Toast.LENGTH_SHORT).show()
}
else ->{
Toast.makeText(applicationContext,"Logging in....", Toast.LENGTH_SHORT).show()
}
}
}
}
这是我的activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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"
android:background="@drawable/gradient_bg"
tools:context=".MainActivity">
<ImageView
android:id="@+id/imageView"
android:layout_width="199dp"
android:layout_height="244dp"
android:layout_marginTop="44dp"
android:backgroundTint="#2E2727"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/avatar" />
<EditText
android:id="@+id/username_Txt"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="40dp"
android:layout_marginEnd="20dp"
android:backgroundTint="#100A0A"
android:ems="10"
android:hint="@string/username"
android:inputType="text"
android:minHeight="48dp"
android:textColor="#000000"
android:textColorHint="#0B0909"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView" />
<EditText
android:id="@+id/password_Txt"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="40dp"
android:layout_marginEnd="20dp"
android:backgroundTint="#050505"
android:ems="10"
android:hint="@string/password"
android:inputType="textPassword"
android:minHeight="48dp"
android:textColor="#000000"
android:textColorHint="#0B0909"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/username_Txt" />
<Button
android:id="@+id/LoginBtn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="40dp"
android:layout_marginEnd="20dp"
android:backgroundTint="#DAD8D8"
android:text="@string/Login_btn"
android:textColor="#000000"
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/password_Txt" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="20dp"
android:text="@string/forgot_pass"
android:textColor="#000000"
android:textColorHint="#020202"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/LoginBtn" />
</androidx.constraintlayout.widget.ConstraintLayout>
您的
MainActivity
被声明为抽象,因此 Android(以及其他所有人)无法实例化它。
如果您确实需要它是抽象的,请尝试子类化
MainActivity
并在您的 AndroidManifest.xml
中声明子级。给父类起一个不同的名字也很好。
例如 家长:
abstract class BaseActivity: AppCompatActivity() {
...
}
孩子:
class MainActivity : BaseActivity() {
}