尽管没有任何更改,但简单的应用程序仍会崩溃



我对Java和Android Studio都是新手(各有一天的经验(。

我正在做一个测试应用程序,你敲击一个核桃,计数器每次都会上升一个,非常简单。该应用程序运行得非常好,然而,今天早上它停止了正常运行,每当我试图运行它时,该应用程序就会停止。

我试过几件事,把它缩小到一行和一个错误,但我不确定该怎么办。

我知道NullPointerException是什么,但我不知道在这种情况下如何修复它。由于我是IDE和语言的新手,任何关于代码中任何的建议都是绝对受欢迎的!

截至目前,该应用程序由2个类组成:

MainActivity.java:

package com.nut.calendar;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity{
//WIDGETS
ImageButton nutButton = findViewById(R.id.nutButton);
TextView nutNum = findViewById(R.id.nutsNum);

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nutButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Variables.nutCount += 1;
nutNum.setText(String.valueOf(Variables.nutCount));
}
});
}
}

Variables.java:

package com.nut.calendar;
public class Variables{
public static int nutCount = 0;
}

错误指向"MainActivity.java"中的第12行:

ImageButton nutButton = findViewById(R.id.nutButton);

Logcat中的错误显示:

原因:java.lang.NullPointerException:试图在空对象引用上调用虚拟方法"android.content.pm.ApplicationInfo android.coontent.Context.getApplicationInfo((">

如有任何意见,我将不胜感激!

以下是整个堆栈跟踪:错误

如果你查看Android应用程序的生命周期,你就会明白为什么会出现这个错误。当你启动应用程序时,Android将以特定的方式运行AppCompatActivity中的方法,你需要在setContentView(R.layout.activity_main);之后调用findViewById,因为是setContentView设置了你的views,而findViewById需要设置它才能真正找到任何view

findViewById如果在调用setContentView之前调用它,它将返回null。所以"nutButton";以及";nutNum";为null。在这里我修复了代码副本。

package com.nut.calendar;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity extends AppCompatActivity{
//WIDGETS
TextView nutNum;
ImageButton nutButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nutButton = findViewById(R.id.nutButton);
nutNum = findViewById(R.id.nutsNum);

nutButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Variables.nutCount += 1;
nutNum.setText(String.valueOf(Variables.nutCount));
}
});
}

}

最新更新