尽管什么都不做,简单的应用程序还是崩溃了
Simple app crashes despite changing nothing
我是 Java 和 Android Studio 的新手(每个都有 1 天的经验)。
我正在制作一个测试应用程序,您可以在其中点击核桃,每次点击一个计数器都会增加一个,非常简单。该应用程序 运行ning 非常好,但是,今天早上它停止 运行ning 正常,每当我尝试 运行 它时,该应用程序都会停止。
我已经尝试了一些事情并将其缩小到一行和一个错误,但我不确定该怎么做。
我明白 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 中的错误表示:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
如有任何意见,我将不胜感激!
这是整个堆栈跟踪:
Error
如果您查看 Android 应用程序 lifecycle,您就会明白为什么会出现此错误。当您启动应用程序时,Android 将以特定方式 运行 AppCompatActivity
中的方法,您需要在 setContentView(R.layout.activity_main);
之后调用 findViewById
因为它是 setContentView
设置你的 views
和 findViewById
需要先设置它才能真正找到任何 view
.
如果您在调用 setContentView 之前调用它,findViewById 将 return 为空。所以“nutButton”和“nutNum”为空。
这里我修复代码复制那个。
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));
}
});
}
}
我是 Java 和 Android Studio 的新手(每个都有 1 天的经验)。
我正在制作一个测试应用程序,您可以在其中点击核桃,每次点击一个计数器都会增加一个,非常简单。该应用程序 运行ning 非常好,但是,今天早上它停止 运行ning 正常,每当我尝试 运行 它时,该应用程序都会停止。
我已经尝试了一些事情并将其缩小到一行和一个错误,但我不确定该怎么做。
我明白 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 中的错误表示:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
如有任何意见,我将不胜感激!
这是整个堆栈跟踪: Error
如果您查看 Android 应用程序 lifecycle,您就会明白为什么会出现此错误。当您启动应用程序时,Android 将以特定方式 运行 AppCompatActivity
中的方法,您需要在 setContentView(R.layout.activity_main);
之后调用 findViewById
因为它是 setContentView
设置你的 views
和 findViewById
需要先设置它才能真正找到任何 view
.
findViewById 将 return 为空。所以“nutButton”和“nutNum”为空。 这里我修复代码复制那个。
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));
}
});
}
}