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

Android Studio应用运行自动崩溃的解决方法

解决Android应用启动崩溃问题:NullPointerException

问题根源

从崩溃日志的关键栈信息可定位核心问题:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
    ...
    at androidx.appcompat.app.AppCompatActivity.findViewById(AppCompatActivity.java:264)
    at com.example.testing.MainActivity.<init>(MainActivity.java:13)

问题出在类成员变量初始化阶段调用了findViewById:

TextView answer = (TextView) findViewById(R.id.answer);

Activity实例化时(<init>阶段),Context还未完成初始化,此时调用findViewById会直接触发空指针异常。findViewById必须在setContentView之后、Activity生命周期方法(如onCreate)内调用,因为此时布局已加载,Context也处于就绪状态。

修复代码

修改MainActivity.java,将控件初始化逻辑移到onCreate方法内,且放在setContentView之后:

package com.example.testing;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    private Button residental;
    private Button highway;
    private TextView answer; // 仅声明变量,不提前初始化

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // 所有控件初始化必须在setContentView之后执行
        highway = findViewById(R.id.highway);
        residental = findViewById(R.id.residental);
        answer = findViewById(R.id.answer); // 移至此处完成初始化

        int residentalAmount = 45;
        int highwayAmount = 75;

        highway.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                answer.setText("You should go");
                answer.setVisibility(View.VISIBLE); // 修复原注释中的错误写法
            }
        });
    }
}

额外说明

  • 控件初始化的正确时机:必须在setContentView(R.layout.xxx)之后,确保布局已加载到Activity中,才能通过ID找到对应的控件。
  • 原代码中answer.setVisibility = true;是错误语法,正确调用方式为answer.setVisibility(View.VISIBLE),View.VISIBLE是Android内置常量,用于设置控件可见状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:15:38