我的简单应用程序在单击按钮时关闭



应用程序应接受两个数字,并在单击按钮时,在文本视图中打印总和。

布局按预期显示,如预期所示: 布局 但是在单击按钮时,该应用程序会像这样停止:停止消息。

<?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=".MainActivity">

<EditText
android:id="@+id/editText1"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="46dp"
android:layout_marginTop="88dp"
android:ems="10"
android:inputType="number"
android:layout_alignParentLeft="true"
android:layout_marginLeft="46dp" />
<EditText
android:id="@+id/editText2"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignTop="@+id/editText1"
android:layout_marginEnd="57dp"
android:ems="10"
android:inputType="number"
android:layout_alignParentRight="true"
android:layout_marginRight="57dp" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="192dp"
android:text="TextView" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="187dp"
android:text="Button" />
</RelativeLayout>

而 Java 文件是。

package com.example.home.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.SpannableStringBuilder;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextClock;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
EditText et1, et2;
TextView tv1;
Button bt1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et1 = (EditText) findViewById(R.id.editText1);
et2 = (EditText) findViewById(R.id.editText2);
tv1 = (TextView) findViewById(R.id.textView1);
bt1 = (Button) findViewById(R.id.button1);
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int num1, num2, res;
num1 = Integer.parseInt(et1.getText().toString());
num2 = Integer.parseInt(et2.getText().toString());
res = num1 + num2;
tv1.setText(res);
}
});
}
}

当我运行该应用程序时,它会在移动设备和模拟器上根据需要显示布局。它还正确接受这两个数字。但是,单击该按钮时,应用将停止,如下所示。我正在使用安卓 3.1.3。

请告知我哪里出错了?

更改此行:tv1.setText(res);进入这个tv1.setText(String.valueOf(res));

原因是tv1.setText(res).有两个方法具有一个参数,它们是setText(Int) and setText(CharSequence)。与在代码中一样,在将res声明为 Integer 时,您意外调用了第一个方法,该方法被解释为资源 ID。您应该通过将res转换为字符串来调用第二个。

只需将行tv1.setText(res);更改为tv1.setText(Integer.toString(res));

package com.example.home.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.SpannableStringBuilder;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextClock;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
EditText et1, et2;
TextView tv1;
Button bt1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et1 = (EditText) findViewById(R.id.editText1);
et2 = (EditText) findViewById(R.id.editText2);
tv1 = (TextView) findViewById(R.id.textView1);
bt1 = (Button) findViewById(R.id.button1);
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int num1, num2, res;
num1 = Integer.parseInt(et1.getText().toString());
num2 = Integer.parseInt(et2.getText().toString());
res = num1 + num2;
tv1.setText(Integer.toString(res));
}
});
}
}

您可以阅读TextView文档以了解有关其公共方法的更多信息。

您在文本字段中设置了一个整数值,这是不允许的。所以你得到了一个例外。为了解决将整数转换为字符串的问题。

bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int num1, num2, res;
num1 = Integer.parseInt(et1.getText().toString());
num2 = Integer.parseInt(et2.getText().toString());
res = num1 + num2;
tv1.setText("" + res);
}
});

此外,还应应用验证。就像用户单击按钮而不输入任何数字一样,应用程序将停止。所以你应该加上——

if(! et1.getText().toString().equals("") && ! et2.getText().toString().equals("") ) {
num1 = Integer.parseInt(et1.getText().toString());
num2 = Integer.parseInt(et2.getText().toString());
res = num1 + num2;
tv1.setText("" + res);
}
else {
Toast.makeText(this, "Enter the numbers", Toast.LENGTH_LONG).show();
}

res 变量应为 String 类型。

最新更新