java - 如何修复 Android Studio 中的崩溃
问题描述
我正在为传感器创建一个应用程序,当我启动它时,应用程序崩溃了。
我在 2 部不同的手机和 2 个模拟器上尝试了该应用程序,但在每台设备上都崩溃了。
这是 MainActivity.java 文件:::
package com.example.ir_sensor;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
openMenu = findViewById(R.id.Open_menu);
closeMenu = findViewById(R.id.Close_menu);
}
View openMenu = findViewById(R.id.Open_menu);
View closeMenu = findViewById(R.id.Close_menu);
public void menu() {
if (openMenu.getVisibility() == View.VISIBLE) {
closeMenu.setVisibility(View.GONE);
} else if (closeMenu.getVisibility() == View.GONE){
openMenu.setVisibility(View.VISIBLE);
}
}
}
这是 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"
tools:context=".MainActivity">
<ImageView
android:id="@+id/LOGO"
android:layout_width="0dp"
android:layout_height="248dp"
android:layout_marginStart="8dp"
android:layout_marginTop="52dp"
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:contentDescription="@string/logo"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/logo_int_lukka" />
<ImageView
android:id="@+id/Close_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="49dp"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/LOGO"
app:srcCompat="@drawable/ic_menu_less" />
<ImageView
android:id="@+id/Open_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="49dp"
android:contentDescription="@string/openmenu"
android:visibility="visible"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/LOGO"
app:srcCompat="@android:drawable/ic_menu_more" />
<LinearLayout
android:id="@+id/menuLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="48dp"
android:layout_marginTop="380dp"
android:baselineAligned="false"
android:orientation="horizontal"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal">
<ImageView
android:id="@+id/houseMenu"
android:layout_width="4dp"
android:layout_height="70dp"
android:layout_weight="1"
android:contentDescription="@string/housemenu"
app:srcCompat="@drawable/house_menu" />
<FrameLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2">
</FrameLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<ImageView
android:id="@+id/IR_LED"
android:layout_width="0dp"
android:layout_height="70dp"
android:layout_weight="1"
android:contentDescription="@string/ir_led"
app:srcCompat="@drawable/ir_led" />
<FrameLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2">
</FrameLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal">
<ImageView
android:id="@+id/alarmSign"
android:layout_width="0dp"
android:layout_height="70dp"
android:layout_weight="1"
android:contentDescription="@string/alarmsign"
app:srcCompat="@drawable/on_off__alert" />
<FrameLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2">
</FrameLayout>
</LinearLayout>
</LinearLayout>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/gridline380FromTop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="380dp"
android:orientation="horizontal"
app:layout_constraintGuide_begin="380dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/gridline48FromLeft"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="48dp"
android:orientation="vertical"
app:layout_constraintGuide_begin="48dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
这是 Logcat:::
2019-08-12 17:14:39.966 9648-9648/com.example.ir_sensor E/AndroidRuntime:致命异常:主进程:com.example.ir_sensor,PID:9648 java.lang.RuntimeException:无法实例化活动 ComponentInfo{ com.example.ir_sensor/com.example.ir_sensor.MainActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'android.view.Window$Callback android.view.Window.getCallback()' android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3194) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 在 android.app .servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app。servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper .loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller .run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 原因:java.lang.NullPointerException:尝试调用虚拟方法'android.view.Window$Callback android.view.Window.getCallback()' 在 androidx.appcompat.app.AppCompatDelegateImpl.(AppCompatDelegateImpl.java:249) 在 androidx.appcompat.app.AppCompatDelegate.create(AppCompatDelegate.java:182) 在 androidx.appcompat.app.AppCompatActivity.getDelegate(AppCompatActivity.java:520) 在 androidx.appcompat.app.AppCompatActivity.findViewById(AppCompatActivity.java :191) 在 com.example.ir_sensor.MainActivity.(MainActivity.java:18) 在 java.lang.Class.newInstance(Native Method) 在 android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95) 在 androidx.core .app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:43) 在 android.app.ActivityThread.app.Instrumentation.newActivity(Instrumentation.java:1243) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3182) 在 android.app.ActivityThread。 handleLaunchActivity(ActivityThread.java:3409) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java :95) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 在 android.os.Handler.dispatchMessage(Handler.java:107) 在 android.os.Looper.loop(Looper.java:214)在 android.app.ActivityThread.main(ActivityThread.java:7356) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 我该怎么办?930)我能做什么?930)我能做什么?930)我能做什么?930)我能做什么?servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app .ActivityThread$H.handleMessage(ActivityThread.java:2016) 在 android.app.ActivityThread 的 android.os.Handler.dispatchMessage(Handler.java:107) 在 android.os.Looper.loop(Looper.java:214)。 main(ActivityThread.java:7356) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 在 com.android.internal。 os.ZygoteInit.main(ZygoteInit.java:930) 我能做什么?servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app .ActivityThread$H.handleMessage(ActivityThread.java:2016) 在 android.app.ActivityThread 的 android.os.Handler.dispatchMessage(Handler.java:107) 在 android.os.Looper.loop(Looper.java:214)。 main(ActivityThread.java:7356) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 在 com.android.internal。 os.ZygoteInit.main(ZygoteInit.java:930) 我能做什么?在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.ActivityThread$H 执行(LaunchActivityItem.java:83) .handleMessage(ActivityThread.java:2016) 在 android.os.Handler.dispatchMessage(Handler.java:107) 在 android.os.Looper.loop(Looper.java:214) 在 android.app.ActivityThread.main(ActivityThread. java:7356) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 在 com.android.internal.os.ZygoteInit。 main(ZygoteInit.java:930) 我能做什么?在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.ActivityThread$H 执行(LaunchActivityItem.java:83) .handleMessage(ActivityThread.java:2016) 在 android.os.Handler.dispatchMessage(Handler.java:107) 在 android.os.Looper.loop(Looper.java:214) 在 android.app.ActivityThread.main(ActivityThread. java:7356) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 在 com.android.internal.os.ZygoteInit。 main(ZygoteInit.java:930) 我能做什么?executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 在 android.os.Handler.dispatchMessage (Handler.java:107) 在 android.os.Looper.loop(Looper.java:214) 在 android.app.ActivityThread.main(ActivityThread.java:7356) 在 java.lang.reflect.Method.invoke(Native Method ) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 我该怎么办?executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 在 android.os.Handler.dispatchMessage (Handler.java:107) 在 android.os.Looper.loop(Looper.java:214) 在 android.app.ActivityThread.main(ActivityThread.java:7356) 在 java.lang.reflect.Method.invoke(Native Method ) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 我该怎么办?handleMessage(ActivityThread.java:2016) 在 android.os.Handler.dispatchMessage(Handler.java:107) 在 android.os.Looper.loop(Looper.java:214) 在 android.app.ActivityThread.main(ActivityThread.java :7356) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 在 com.android.internal.os.ZygoteInit.main (ZygoteInit.java:930) 我能做什么?handleMessage(ActivityThread.java:2016) 在 android.os.Handler.dispatchMessage(Handler.java:107) 在 android.os.Looper.loop(Looper.java:214) 在 android.app.ActivityThread.main(ActivityThread.java :7356) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 在 com.android.internal.os.ZygoteInit.main (ZygoteInit.java:930) 我能做什么?492) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 我能做什么?492) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 我能做什么?
解决方案
错误是您在方法之外定义openMenu
and变量。然而,问题是在 onCreate 之前您还没有定义您的视图,因此在定义视图之前通过 id 获取视图会导致(程序找不到您要求的变量并崩溃)。所以这样做:closeMenu
onCreate()
NullPointerException
package com.example.ir_sensor;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
openMenu = findViewById(R.id.Open_menu);
closeMenu = findViewById(R.id.Close_menu);
}
View openMenu;
View closeMenu;
public void menu() {
if (openMenu.getVisibility() == View.VISIBLE) {
closeMenu.setVisibility(View.GONE);
} else if (closeMenu.getVisibility() == View.GONE){
openMenu.setVisibility(View.VISIBLE);
}
}
}
推荐阅读
- node.js - express.js 路由行为
- django - 基于多租户架构的两个docker容器之间的通信
- mysql - SQL 查询从一个表返回记录,这些记录与另一个表中的 2 条记录相关联
- security - 如何使 dokku 仅将应用程序部署到 https 连接
- snowflake-cloud-data-platform - 在 VALUES 子句中使用 REPEAT/SPACE 的雪花
- python - 请求库未发送请求
- node.js - 无法将新用户添加到 mongodb 数据库
- java - 找不到符号 findViewById
- reactjs - React Slick Sync - 功能组件
- gcc - ELF:为什么将struct变量放入64位系统中以32字节对齐的部分