java - 在空对象引用上按任何按钮 \'android.text.Editable android.widget.EditText.getText()' 时出错
问题描述
android vm中的应用程序突然停止。尝试在空对象引用上调用虚拟方法“android.text.Editable android.widget.EditText.getText()”
请帮忙。android studio错误 错误:
View.performClickInternal(View.java:7102) at android.view.View.access$3500(View.java:801) at android.view.View$PerformClick.run(View.java:27336) at android.os.Handler。 handleCallback(Handler.java:883) 在 android.os.Handler.dispatchMessage(Handler.java:100) 在 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) 2021-01-08 00:58:49.336 9583-9583/com.example.simplecalculator I/Process:发送信号。PID:9583 SIG:9 handleCallback(Handler.java:883) 在 android.os.Handler.dispatchMessage(Handler.java:100) 在 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) 2021-01-08 00:58:49.336 9583-9583/com.example.simplecalculator I/Process:发送信号。PID:9583 SIG:9 handleCallback(Handler.java:883) 在 android.os.Handler.dispatchMessage(Handler.java:100) 在 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) 2021-01-08 00:58:49.336 9583-9583/com.example.simplecalculator I/Process:发送信号。PID:9583 SIG:9 main(ZygoteInit.java:930) 2021-01-08 00:58:49.336 9583-9583/com.example.simplecalculator I/Process:发送信号。PID:9583 SIG:9 main(ZygoteInit.java:930) 2021-01-08 00:58:49.336 9583-9583/com.example.simplecalculator I/Process:发送信号。PID:9583 SIG:9
也添加我的代码。
public class MainActivity extends AppCompatActivity {
EditText num1Text;
EditText num2Text;
TextView ResText;
int num1;
int num2;
int result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText num1Text =(EditText) findViewById(R.id.num1Text);
EditText num2Text =(EditText) findViewById(R.id.num2Text);
TextView ResText =(TextView) findViewById(R.id.ResText);
}
public void sum(View view) {
if(num1Text.getText().toString().matches("") || num2Text.getText().toString().matches("")){
ResText.setText("Enter number");
}
else{
num1 = Integer.parseInt(num1Text.getText().toString());
num2 = Integer.parseInt(num2Text.getText().toString());
result = num1 + num2;
ResText.setText("Result = " + result);
}
}
public void deduct(View view) {
if(num1Text.getText().toString().matches("") || num2Text.getText().toString().matches("")){
ResText.setText("Enter number");
}
else {
num1 = Integer.parseInt(num1Text.getText().toString());
num2 = Integer.parseInt(num2Text.getText().toString());
result = (num1 - num2);
ResText.setText("Result = " + result);
}
}
public void multiply(View view) {
if(num1Text.getText().toString().matches("") || num2Text.getText().toString().matches("")){
ResText.setText("Enter number");
}
else {
num1 = Integer.parseInt(num1Text.getText().toString());
num2 = Integer.parseInt(num2Text.getText().toString());
result = num1 * num2;
ResText.setText("Result = " + result);
}
}
public void divide(View view) {
if(num1Text.getText().toString().matches("") || num2Text.getText().toString().matches("")){
ResText.setText("Enter number");
}
else {
num1 = Integer.parseInt(num1Text.getText().toString());
num2 = Integer.parseInt(num2Text.getText().toString());
result = num1 / num2;
ResText.setText("Result = " + result);
}
}
}
解决方案
您没有正确初始化EditText
andTextView
字段。
您的代码实际上在做的是使用 findViewById 来获取值,然后将它们分配给局部变量而不是适当的字段。
改变
EditText num1Text = (EditText) findViewById(R.id.num1Text);
EditText num2Text = (EditText) findViewById(R.id.num2Text);
TextView ResText = (TextView) findViewById(R.id.ResText);
至
num1Text = (EditText) findViewById(R.id.num1Text);
num2Text = (EditText) findViewById(R.id.num2Text);
ResText = (TextView) findViewById(R.id.ResText);
值得注意的是,还有其他错误。例如,您没有处理用户在其中一个文本框中输入非数字值的情况。当您尝试将文本转换为数字时,这将导致异常。
推荐阅读
- asp.net - 扩展现有(基于 Azure)的 ASP.NET 表单身份验证应用程序以使用 ADFS 所需的标题步骤
- ruby-on-rails - Rails:嵌套表单内的嵌套字段
- java - 使用 simpledateformat 解析时间戳
- jquery - 不显示上传按钮
- javascript - 如何为从数组结果创建的每个组件创建特定事件 - React Native
- jenkins - 如何在 Jenkins 作业工作区远程添加脚本文件并将其作为构建步骤的一部分运行
- python - 我无法超越问题的这个阶段:怎么了?edx
- mysql - 大数据表 MySQL 查询优化
- python - 原始 ICMP 数据包显示没有答案,而 ping 消息确实得到回复
- apache-flink - 如何在 flink 中更新 KeyedBroadcastProcessFunction 中的广播状态?