You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重启后app.linuxduck.com.tamapet崩溃:NullPointerException问题求助

Android应用重启后崩溃:NullPointerException 解决方案

我开发的app.linuxduck.com.tamapet应用此前运行正常,但重启后崩溃,控制台抛出如下错误:

Process: app.linuxduck.com.tamapet, PID: 22284
    java.lang.RuntimeException: Unable to start activity ComponentInfo{app.linuxduck.com.tamapet/app.linuxduck.com.tamapet.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.widget.ImageView.getBackground()' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3645)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3782)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
        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:2307)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loopOnce(Looper.java:201)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7872)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.widget.ImageView.getBackground()' on a null object reference
        at app.linuxduck.com.tamapet.MainActivity.onCreate(MainActivity.java:286)
        at android.app.Activity.performCreate(Activity.java:8305)
        at android.app.Activity.performCreate(Activity.java:8284)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1417)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3626)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3782)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
        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:2307)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loopOnce(Looper.java:201)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7872)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

相关代码片段

MainActivity部分代码

package app.linuxduck.com.tamapet;

import android.animation.ObjectAnimator;
import android.content.Context;
import android.graphics.Point;
import android.graphics.drawable.AnimationDrawable;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Button;
import android.widget.Toast;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import static java.lang.Math.abs;
import static java.lang.System.currentTimeMillis;

public class MainActivity extends AppCompatActivity {

    // Initializations
    // ---------------
    // Pet
    private Pet myPet;

    // Ints
    private int timeKeeper;
    private int gameAttempts;
    private int random;
    private int SHORTduration;
    private int LONGduration;
    private int creatureChoice;
    private int resourceID;
    private int width;
    private int height;

    // Floats
    private float objX;
    private float objY;

    //TextViews
    private TextView hungerIntText;
    private TextView waterIntText;
    private TextView ageIntText;
    private TextView happyIntText;
    private TextView healthIntText;
    private TextView deathIntText;
    private TextView nameYourNewPetText;
    private TextView deadPetText;
    private TextView guessANumberText;
    private TextView alreadyGuessedLettersText;
    private TextView hiddenWordText;
    private TextView guessALetterText;
    private TextView loadedPetNameText;

    // Buttons
    private Button gameOneButton;
    private Button gameTwoButton;
    private Button listOfPetsButton;
    private Button createNewPetButton;
    private Button openOldPetButton;
    private Button submitButton;

    // ImageButtons
    private ImageButton featherImageButton;
    private ImageButton ballImageButton;
    private ImageButton soundImageButton;
    private ImageButton savedCreaturesImageButton;
    private ImageButton mealImageButton;
    private ImageButton treatImageButton;
    private ImageButton waterImageButton;
    private ImageButton playImageButton;
    private ImageButton punishImageButton;
    private ImageButton shotImageButton;

    // EditTexts
    private EditText numberEditText;
    private EditText letterEditText;
    private EditText nameEditText;

    // Characters
    Character characterGuess;

    // CharSequences
    private CharSequence name;

    // Strings
    private String hiddenWordString;
    private String randomlyChoseWord;
    private String eventText;
    private String word;

    // Booleans
    private boolean saveButtonWasOpened;
    private boolean featherWasClicked;
    private boolean ballWasClicked;
    private boolean soundORnot;
    private boolean loaded;
    private boolean first;
    private boolean second;

    // ImageViews
    private ImageView creatureImage;
    private ImageView currentCreatureImg;
    private ImageView featherImg;
    private ImageView ballImg;
    private ImageView waterImg;
    private ImageView foodImg;
    private ImageView treatImg;
    private ImageView heartImage;
    private ImageView butterImage;

    // Views
    private View view;

    // Contexts
    private Context context;

    // MediaPlayers
    private MediaPlayer catpurrSound;
    private MediaPlayer drinkingSound;
    private MediaPlayer eatingSound;

    // LinearLayouts
    private LinearLayout linearLayout;

    // ArrayLists
    private ArrayList<Character> guessedLettersArr;
    private ArrayList<Character> lettersHidden;
    private ArrayList<String> words;
    private ArrayList<String> creatureList;

    // AnimationDrawables
    private AnimationDrawable waterAnimation;
    private AnimationDrawable foodAnimation;
    private AnimationDrawable treatAnimation;
    private AnimationDrawable heartAnimation;
    private AnimationDrawable butterAnimation;

    // Displays
    private Display display;

    // Points
    private Point size;

    // ObjectAnimators
    private ObjectAnimator creatureAnimator;

    // Toasts
    Toast eventToast;
    Toast nopeToast;
    Toast correctToast;

    @Override
    protected void onStart(){
        super.onStart();

    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // ---------------------------- //

        myPet = new Pet();

        // Displays
        size = new Point();
        display = getWindowManager().getDefaultDisplay();
        display.getSize(size);

}

activity_main布局代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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/bg"
    android:orientation="vertical"
    android:layout_gravity="center_horizontal"
    android:id="@+id/mainall"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/foodbowl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/bottomstuff"
        android:layout_marginLeft="20sp"
        android:layout_marginRight="20sp"
        android:background="@drawable/food1"
        tools:ignore="ImageContrastCheck"
   />

    <ImageView
        android:id="@+id/waterbowl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/bottomstuff"
        android:layout_toEndOf="@id/foodbowl"
        android:layout_toRightOf="@id/foodbowl"
        android:background="@drawable/water1"
        tools:ignore="ImageContrastCheck"/>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:background="@drawable/heart0"
        android:id="@+id/heartimageview"/>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/ball"
        android:visibility="gone"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="100sp"
        android:layout_centerInParent="true"
        android:background="@drawable/ball"

        android:layout_alignParentStart="true"
        android:layout_marginStart="100sp" />
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/feather"
        android:visibility="gone"
        android:layout_alignParentRight="true"
        android:layout_marginRight="50sp"
        android:layout_marginLeft="50sp"
        android:layout_centerInParent="true"
        android:background="@drawable/feather"

        android:layout_alignParentEnd="true" />
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/creatureimageview"
        />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center_horizontal"
        android:background="@drawable/topinfo"
        android:baselineAligned="false">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_weight="1.0">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:paddingLeft="2sp"
                android:paddingRight="2sp"
                android:textColor="@color/white"
                android:textSize="16sp"
                android:text="@string/age"
                android:id="@+id/agetext"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:paddingLeft="2sp"
                android:paddingRight="2sp"
                android:textColor="@color/white"
                android:textSize="16sp"
                android:id="@+id/ageinttext"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_weight="1.0">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:paddingLeft="2sp"
                android:paddingRight="2sp"
                android:textColor="@color/white"
                android:textSize="16sp"
                android:text="@string/hunger"
                android:id="@+id/hungertext"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:paddingLeft="2sp"
                android:paddingRight="2sp"
                android:textColor="@color/white"
                android:textSize="16sp"
                android:id="@+id/hungerinttext"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_weight="1.0">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:paddingLeft="2sp"
                android:paddingRight="2sp"
                android:textColor="@color/white"
                android:textSize="16sp"
                android:text="@string/water"
                android:id="@+id/watertext"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:paddingLeft="2sp"
                android:paddingRight="2sp"
                android:textColor="@color/white"
                android:textSize="16sp"
                android:id="@+id/waterinttext"/>
        </LinearLayout>
</RelativeLayout>

问题原因

从错误栈可直接定位:崩溃发生在MainActivity.java第286行,是调用了未初始化的ImageView对象的getBackground()方法,触发空指针异常。

你在MainActivity中声明了多个ImageView成员变量(如foodImg、waterImg、heartImage等),但在onCreate方法里没有通过findViewById将这些变量与布局中对应的控件绑定。布局里的控件ID为foodbowl、waterbowl、heartimageview,代码中直接调用未初始化的ImageView方法,必然抛出空指针。

此前运行正常可能是因为之前的代码包含初始化逻辑,或是某次修改后误删了这部分代码,重启后问题才暴露。

解决方法

  1. 初始化ImageView变量:在onCreate方法中setContentView(R.layout.activity_main);之后,添加对应ImageView的初始化代码,示例:
    // 绑定布局中的foodbowl控件
    foodImg = findViewById(R.id.foodbowl);
    // 绑定布局中的waterbowl控件
    waterImg = findViewById(R.id.waterbowl);
    // 绑定布局中的heartimageview控件
    heartImage = findViewById(R.id.heartimageview);
    // 其他需要调用方法的ImageView同理,逐一绑定
    
  2. 检查所有控件绑定:遍历代码中所有调用了方法的ImageView成员变量,确保每个都完成布局绑定,避免遗漏。
  3. 添加空判断(可选):在调用getBackground()等方法前添加空判断,防止意外空指针:
    if (foodImg != null) {
        Drawable bg = foodImg.getBackground();
        // 后续业务逻辑
    }
    

内容的提问来源于stack exchange,提问作者Grunteck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 03:12:02