Java 为什么我的应用程序在实现按钮时崩溃?
下面是代码…每当我在手机上启动应用程序时,它就会崩溃。我是android编程新手,所以请帮助我。在做了一些测试之后,问题是当我将值分配给Value1和Value2时(只是一个猜测)。请帮帮我。提前谢谢。 MainActivity.javaJava 为什么我的应用程序在实现按钮时崩溃?,java,android,crash,Java,Android,Crash,下面是代码…每当我在手机上启动应用程序时,它就会崩溃。我是android编程新手,所以请帮助我。在做了一些测试之后,问题是当我将值分配给Value1和Value2时(只是一个猜测)。请帮帮我。提前谢谢。 MainActivity.java package com.example.android.add; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.
package com.example.android.add;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
EditText num1;
EditText num2;
Button add;
TextView ans;
int Value1;
int Value2;
int result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
num1 = (EditText) findViewById(R.id.et1);
num2 = (EditText) findViewById(R.id.et2);
Value1 = Integer.parseInt(num1.getText().toString());
Value2 = Integer.parseInt(num2.getText().toString());
add = (Button) findViewById(R.id.addBtn);
ans = (TextView) findViewById(R.id.tv);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result = Value1 + Value2;
ans.setText(""+result);
}
});
}
}
以及activity_main.xml
<?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"
tools:context="com.example.android.add.MainActivity">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:hint="Number 1"
android:textSize="40dp"
android:id="@+id/et1"
android:inputType="number"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:layout_below="@+id/et1"
android:hint="Number 2"
android:textSize="40dp"
android:id="@+id/et2"
android:inputType="number"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/addBtn"
android:layout_below="@+id/et2"
android:text="Add"
android:layout_marginLeft="80dp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Your Answer"
android:textSize="40dp"
android:layout_margin="40dp"
android:layout_below="@+id/addBtn"
android:id="@+id/tv"/>
</RelativeLayout>
不鼓励对按钮使用OnClickListeners。它已替换为XML属性:
android:onClick=“functionName”
此功能将在布局文件附加到的活动中实现。因此,在MainActivity.java
中:
公共作废功能名(视图v){
//你的代码在这里
}
不鼓励对按钮使用OnClickListeners。它已替换为XML属性:android:onClick=“functionName”
此功能将在布局文件附加到的活动中实现。因此,在MainActivity.java
中:
公共作废功能名(视图v){
//你的代码在这里
}
可能存在多个字符串转换错误
Value1 = 0;
try {
Value1 = Integer.parseInt(num1.getText().toString());
} catch(NumberFormatException nfe) {
System.out.println("Could not parse " + nfe);
}
可能存在多个字符串转换错误
Value1 = 0;
try {
Value1 = Integer.parseInt(num1.getText().toString());
} catch(NumberFormatException nfe) {
System.out.println("Could not parse " + nfe);
}
在插入值之前,必须先获取值,然后用户单击“添加”按钮,在
onClickListner中获取值1和值2
照此改变
package com.example.android.add;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
EditText num1;
EditText num2;
Button add;
TextView ans;
int Value1;
int Value2;
int result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
num1 = (EditText) findViewById(R.id.et1);
num2 = (EditText) findViewById(R.id.et2);
add = (Button) findViewById(R.id.addBtn);
ans = (TextView) findViewById(R.id.tv);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Value1 = Integer.parseInt(num1.getText().toString());
Value2 = Integer.parseInt(num2.getText().toString());
result = Value1 + Value2;
ans.setText(""+result);
}
});
}
}
在插入值之前,必须先获取值,然后用户单击“添加”按钮,在onClickListner中获取值1和值2
照此改变
package com.example.android.add;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
EditText num1;
EditText num2;
Button add;
TextView ans;
int Value1;
int Value2;
int result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
num1 = (EditText) findViewById(R.id.et1);
num2 = (EditText) findViewById(R.id.et2);
add = (Button) findViewById(R.id.addBtn);
ans = (TextView) findViewById(R.id.tv);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Value1 = Integer.parseInt(num1.getText().toString());
Value2 = Integer.parseInt(num2.getText().toString());
result = Value1 + Value2;
ans.setText(""+result);
}
});
}
}
此代码写入onClick()
方法。从onCreate()
方法中删除
此代码写入onClick()
方法。从onCreate()
方法中删除。逻辑是:单击按钮获取编辑文本值
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try{
Value1 = Integer.parseInt(num1.getText().toString());
Value2 = Integer.parseInt(num2.getText().toString());
result = Value1 + Value2;
result = Value1 + Value2;
ans.setText(""+result);
}
catch(Exception e)
{
Log.e("Exc",e.toString());
}
}
});
逻辑是:在单击按钮的侦听器时获取编辑文本值
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try{
Value1 = Integer.parseInt(num1.getText().toString());
Value2 = Integer.parseInt(num2.getText().toString());
result = Value1 + Value2;
result = Value1 + Value2;
ans.setText(""+result);
}
catch(Exception e)
{
Log.e("Exc",e.toString());
}
}
});
由于这两行代码,您的应用程序正在崩溃
Value1 = Integer.parseInt(num1.getText().toString());
Value2 = Integer.parseInt(num2.getText().toString());
在这里,您试图将字符串转换为整数,如果editText没有ant值,则字符串为null。这些类型的错误在类型转换时发生,因此在类型转换之前添加验证,如下所示
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
num1 = (EditText) findViewById(R.id.et1);
num2 = (EditText) findViewById(R.id.et2);
add = (Button) findViewById(R.id.addBtn);
ans = (TextView) findViewById(R.id.tv);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(num1.getText() != null && num2.getText() != null) {
Value1 = Integer.parseInt(num1.getText().toString());
Value2 = Integer.parseInt(num2.getText().toString());
result = Value1 + Value2;
ans.setText("" + result);
}
}
});
}
由于这两行代码,您的应用程序正在崩溃
Value1 = Integer.parseInt(num1.getText().toString());
Value2 = Integer.parseInt(num2.getText().toString());
在这里,您试图将字符串转换为整数,如果editText没有ant值,则字符串为null。这些类型的错误在类型转换时发生,因此在类型转换之前添加验证,如下所示
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
num1 = (EditText) findViewById(R.id.et1);
num2 = (EditText) findViewById(R.id.et2);
add = (Button) findViewById(R.id.addBtn);
ans = (TextView) findViewById(R.id.tv);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(num1.getText() != null && num2.getText() != null) {
Value1 = Integer.parseInt(num1.getText().toString());
Value2 = Integer.parseInt(num2.getText().toString());
result = Value1 + Value2;
ans.setText("" + result);
}
}
});
}
将您的代码编辑到此位置,它将运行。问题是您访问EditText
s中的值太早,甚至在您键入任何值之前。您需要在add
按钮的onClick()
中访问这些值
package com.example.android.add;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
EditText num1;
EditText num2;
Button add;
TextView ans;
int Value1;
int Value2;
int result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
num1 = (EditText) findViewById(R.id.et1);
num2 = (EditText) findViewById(R.id.et2);
// If you get value from edit texts here it will cause an error
// since onCreate is called at the very beginning and you have not
// entered any value in num1 and num2.
add = (Button) findViewById(R.id.addBtn);
ans = (TextView) findViewById(R.id.tv);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Instead put them here so you have already inserted values
// into the fields before they are retrieved:
Value1 = Integer.parseInt(num1.getText().toString());
Value2 = Integer.parseInt(num2.getText().toString());
result = Value1 + Value2;
ans.setText(""+result);
}
});
}
}
将您的代码编辑到此位置,它将运行。问题是您访问EditText
s中的值太早,甚至在您键入任何值之前。您需要在add
按钮的onClick()
中访问这些值
package com.example.android.add;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
EditText num1;
EditText num2;
Button add;
TextView ans;
int Value1;
int Value2;
int result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
num1 = (EditText) findViewById(R.id.et1);
num2 = (EditText) findViewById(R.id.et2);
// If you get value from edit texts here it will cause an error
// since onCreate is called at the very beginning and you have not
// entered any value in num1 and num2.
add = (Button) findViewById(R.id.addBtn);
ans = (TextView) findViewById(R.id.tv);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Instead put them here so you have already inserted values
// into the fields before they are retrieved:
Value1 = Integer.parseInt(num1.getText().toString());
Value2 = Integer.parseInt(num2.getText().toString());
result = Value1 + Value2;
ans.setText(""+result);
}
});
}
}
共享错误日志。请共享日志共享错误日志。请共享日志不要只转储代码:解释问题,解释更改。不要只转储代码:解释问题,解释更改。