首页 > 解决方案 > 如何修复 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) 我能做什么?

标签: javaandroid

解决方案


错误是您在方法之外定义openMenuand变量。然而,问题是在 onCreate 之前您还没有定义您的视图,因此在定义视图之前通过 id 获取视图会导致(程序找不到您要求的变量并崩溃)。所以这样做:closeMenuonCreate()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);
        }
    }
}

推荐阅读