我是安卓開發領域的新手。昨晚我根據Youtube的教程做了一個簡單的計算器,幸運的是我已經成功地完成了它。以下是代碼
main.xml:-
<?xml version="1.0" encoding="utf-8"? >
<LinearLayout。
xmlns:android="http://schemas.android.com/apk/res/android"/span>
android:orientation="vertical"。
android:layout_width="match_parent"。
android:layout_height="match_parent"。
android:gravity="top|center">
<ImageView。
android:layout_height="120dp"。
android:layout_width="120dp"。
android:src="@drawable/cal"/span>/>
<EditText。
android:layout_width="wrap_content"
android:inputType="number"
android:layout_height="wrap_content"。
android:ems="10"。
android:layout_marginTop="10dp"。
android:gravity="center"。
android:hint="@string/fstval"
android:id="@ id/etFirstValue"/span>/>
<EditText。
android:layout_width="wrap_content"
android:inputType="number"
android:layout_height="wrap_content"。
android:ems="10"。
android:layout_marginTop="10dp"。
android:gravity="center"。
android:hint="@string/sndval"/span>
android:id="@ id/etSecondValue"/span>/>
<TextView。
android:layout_width="match_parent"/span>
android:layout_height="wrap_content"。
android:textAppearance="? android:attr/textAppearanceMedium"
android:layout_marginTop="10dp"/span>
android:gravity="center"。
android:hint="@string/ans"。
android:textColorHint="#FF0F00"。
android:id="@ id/tvAns"/span>/>
<Button。
android:layout_width="match_parent"/span>
android:layout_height="wrap_content"。
android:text="@string/add"。
android:layout_marginTop="19dp"。
android:layout_marginRight="10dp"。
android:layout_marginLeft="10dp"。
android:background="#4C5866"。
android:padding="10dp">
android:textColor="#000000"。
android:textSize="25sp"。
android:id="@ id/btnAdd"
android:onClick="btnadd"/>
<Button
android:layout_width="match_parent"/span>
android:layout_height="wrap_content"。
android:text="@string/sub"。
android:layout_marginRight="10dp"。
android:layout_marginLeft="10dp"。
android:background="#677789"。
android:padding="10dp">
android:layout_marginTop="5dp"。
android:textColor="#000000"。
android:textSize="25sp"。
android:id="@ id/btnSubtract"。
android:onClick="btnsub"/>
<Button
android:layout_width="match_parent"/span>
android:layout_height="wrap_content"。
android:text="@string/mul"。
android:layout_marginRight="10dp"。
android:layout_marginLeft="10dp"。
android:background="#405163"。
android:padding="10dp">
android:layout_marginTop="5dp"。
android:textColor="#000000"。
android:textSize="25sp"。
android:id="@ id/btnMultiply"。
android:onClick="btnmul"/>
<Button
android:layout_width="match_parent"/span>
android:layout_height="wrap_content"。
android:text="@string/div"。
android:layout_marginRight="10dp"。
android:layout_marginLeft="10dp"。
android:background="#19E6B1"。
android:padding="10dp"。
android:layout_marginTop="5dp"。
android:textColor="#000000"。
android:id="@ id/btnDivide"。
android:textSize="25sp"。
android:onClick="btndiv"/>
</LinearLayout>/span>
mainactivity.java:-
package com.mycompany.myapp;
import android.app.*;
import android.os.*;
import android.widget.*;
import android.view.View.*;
import android.view.*;
public class MainActivity extends Activityprivate EditText etn1;
private EditText etn2;
private TextView tvResult;
private Button btnadd , btnsub , btnmul , btndiv;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(s savedInstanceState)。
setContentView(R.layout.main)。
etn1 = findViewById(R.id.etFirstValue);
etn2 = findViewById(R.id.etSecondValue);
tvResult = findViewById(R.id.tvAns);
Button btnadd = findViewById(R.id.btnAdd)。
btnadd.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int n1 = Integer.parseInt(etn1.getText().toString() )。
int n2 = Integer.parseInt(etn2.getText().toString()) 。
int add = n1 n2。
tvResult.setText(String.valueOf(add) )。
}
});
Button btnsub = findViewById(R.id.btnSubtract)。
btnsub.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int n1 = Integer.parseInt(etn1.getText().toString() )。
int n2 = Integer.parseInt(etn2.getText() .toString())。
int add = n1 - n2。
tvResult.setText(String.valueOf(add))。
}
});
Button btnmul = findViewById(R.id.btnMultiply)。
btnmul.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int n1 = Integer.parseInt(etn1.getText().toString() )。
int n2 = Integer.parseInt(etn2.getText() .toString())。
int add = n1 * n2。
tvResult.setText(String.valueOf(add) )。
}
});
Button btndiv = findViewById(R.id.btnDivide)。
btndiv.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int n1 = Integer.parseInt(etn1.getText().toString() )。
int n2 = Integer.parseInt(etn2.getText() .toString())。
int add = n1 / n2。
tvResult.setText(String.valueOf(add))。
}
});
}
}
但問題是,當我沒有在第一個EditText或第二個EditText或兩者中輸入任何值,并點擊任何按鈕時,應用程式就會崩潰,并彈出一個顯示 "myapp keeps stopping"。我想在空白的EditText上顯示類似 "Please enter a value"(請輸入一個值)的東西,當我沒有在任何EditText上輸入任何值。請幫助我
。uj5u.com熱心網友回復:
問題是你的輸入(例如,etn1.getText().toString())可能不是一個數字。所以你得到NumberFormatException。
要解決這個問題,請將你的代碼改寫成這樣:
btnadd.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int n1 = 0;
int n2 = 0;
try{
n1 = Integer.parseInt(etn1.getText().toString())。
}catch(Exception x) {
x.printStackTrace()。
n1 = 0;
}
try{
n2 = Integer.parseInt(etn2.getText().toString())。
}catch(Exception x) {
x.printStackTrace()。
n2 = 0;
}
int add = n1 n2。
tvResult.setText(String.valueOf(add) )。
}
});
uj5u.com熱心網友回復:
你收到一個NumberFormatException,因為當你運行
時Integer.parseInt(etn1.getText().toString()
當一個EditText欄位沒有值時,它回傳 有許多方法來處理這個問題,但我建議使用Uncle Bobs Clean Code 方法。您可以在一個嘗試 捕捉塊中對每個按鈕的點擊進行封裝,就像這樣: 您可以在一個嘗試 捕捉塊中對每個按鈕的點擊進行封裝。
但是我建議,鑒于這段代碼將在所有的按鈕型別上有多種用途,你將你的 那么在每個Button的onClick監聽器中可以是: uj5u.com熱心網友回復: 你的應用程式崩潰了,因為當你沒有輸入任何值并點擊按鈕時,它試圖將一個空的 使用這個
標籤:""/code>。"" 不能被轉錄成一個數字。因此,它拋出NumberFormat Exception。
try{
n1 = Integer.parseInt(etn1.getText().toString())。
}catch(NumberFormatException x) {
x.printStackTrace()。
n1 = 0;
}
n變數移到全域變數(在代碼庫的頂部,即int n1)并產生一個新的方法,如Private void setNumbers(){
try{
n1 = Integer.parseInt(etn1.getText().toString()
n2 = Integer.parseInt(etn2.getText().toString() )。
}catch(NumberFormatException x) {
x.printStackTrace()。
n1 = 0;
n2 = 0;
}
btndiv. setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
setNumbers()。
int divide = n1 / n2;
tvResult.setText(String.valueOf(divide)) 。
}
});
字串決議為int,這導致了一個NumberFormatException并使你的應用程式崩潰了。
然而,你可以在決議你的編輯文本之前首先檢查它們是否為空,如果它們是空的,就顯示一個祝酒詞或一個提示欄。
String number1 = etn1.getText() .toString()。
String number2 = etn2.getText().toString()。
if(number1.isBlank() || number2.isBlank()){
Toast.makeText(this, "請輸入一個值", Toast.LENGTH_LONG).show()。
} else {
int n1 = Integer.parseInt(number1)。
int n2 = Integer.parseInt(number2);
int add = n1 n2;
tvResult.setText(String.valueOf(add))。
