2014-01-06 59 views
0

我正在製作一個簡單的計算器,這是我第一次製作的應用程序,我有兩個EditTexts,如果我按下4個計算按鈕中的任何一個,應用程序崩潰,如果EditText1 & EditText2爲空,並且如果沒有按照按鈕進行計算,則顯示Toast消息...如何防止它崩潰? 這裏是我的MainActivity.java當我按下一個按鈕,並且EditTexts爲空時,它崩潰

public class MainActivity extends Activity { 
    EditText number1text; 
    EditText number2text; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     number1text = (EditText) findViewById(R.id.num1text); 
     number2text = (EditText) findViewById(R.id.num2text); 
    } 

    public void calcadd(View v) { // here 
     if (number1text.getText().toString().isEmpty() || number2text.getText().toString().isEmpty()) { 
      Toast msg = Toast.makeText(getBaseContext(), 
      "You Should Put Numbers To Do Calculation", 
      Toast.LENGTH_LONG); 
      msg.show(); 
     } 
     else{ 

     } 
     Integer num1text = Integer.parseInt(number1text.getText().toString()); 
     Integer num2text = Integer.parseInt(number2text.getText().toString()); 
     Integer ans = num1text + num2text; 

     TextView answer = (TextView) findViewById(R.id.ans); 
     answer.setText("Answer:" + ans.toString()); 
    } 

    public void calcminus(View v) { // here 
     if (number1text.getText().toString().isEmpty() || number2text.getText().toString().isEmpty()) { 
      Toast msg = Toast.makeText(getBaseContext(), 
      "You Should Put Numbers To Do Calculation", 
      Toast.LENGTH_LONG); 
      msg.show(); 
     } 
     else{ 

     } 
     Integer num1text = Integer.parseInt(number1text.getText().toString()); 
     Integer num2text = Integer.parseInt(number2text.getText().toString()); 
     Integer ans = num1text - num2text; 

     TextView answer = (TextView) findViewById(R.id.ans); 
     answer.setText("Answer:" + ans.toString()); 
    } 

    public void calcdivide(View v) { // here 
     if (number1text.getText().toString().isEmpty() || number2text.getText().toString().isEmpty()) { 
      Toast msg = Toast.makeText(getBaseContext(), 
      "You Should Put Numbers To Do Calculation", 
      Toast.LENGTH_LONG); 
      msg.show(); 
     } 
     else{ 

     } 
     Integer num1text = Integer.parseInt(number1text.getText().toString()); 
     Integer num2text = Integer.parseInt(number2text.getText().toString()); 
     Integer ans = num1text/num2text; 

     TextView answer = (TextView) findViewById(R.id.ans); 
     answer.setText("Answer:" + ans.toString()); 
    } 

    public void calcmultiply(View v) { // here 
     if (number1text.getText().toString().isEmpty() || number2text.getText().toString().isEmpty()) { 
      Toast msg = Toast.makeText(getBaseContext(), 
      "You Should Put Numbers To Do Calculation", 
      Toast.LENGTH_LONG); 
      msg.show(); 
     } 
     else{ 

     } 
     Integer num1text = Integer.parseInt(number1text.getText().toString()); 
     Integer num2text = Integer.parseInt(number2text.getText().toString()); 
     Integer ans = num1text * num2text; 

     TextView answer = (TextView) findViewById(R.id.ans); 
     answer.setText("Answer:" + ans.toString()); 
    } 




    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { // here 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 
} 

,這是我activity_main.xml中:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <TextView 
     android:id="@+id/num1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:text="@string/num1" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     /> 

    <EditText 
     android:id="@+id/num1text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/num1" 
     android:layout_below="@+id/num1" 
     android:ems="10" 
     android:inputType="number" 
     > 

     <requestFocus /> 
    </EditText> 

    <TextView 
     android:id="@+id/num2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/num1text" 
     android:layout_below="@+id/num1text" 
     android:text="@string/num2" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     /> 

    <EditText 
     android:id="@+id/num2text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/num2" 
     android:layout_below="@+id/num2" 
     android:ems="10" 
     android:inputType="number" 
     /> 

    <TextView 
     android:id="@+id/ans" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/num2text" 
     android:layout_below="@+id/num2text" 
     android:layout_marginTop="52dp" 
     android:text="@string/anstxt" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/num2text" 
     android:layout_below="@+id/num2text" 
     android:text="@string/btnadd" 
     android:onClick="calcadd"/> 

    <Button 
     android:id="@+id/Button01" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/button1" 
     android:layout_alignBottom="@+id/button1" 
     android:layout_toRightOf="@+id/button1" 
     android:text="@string/btnminus" 
     android:onClick="calcminus"/> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/Button01" 
     android:layout_alignBottom="@+id/Button01" 
     android:layout_toRightOf="@+id/Button01" 
     android:text="@string/btnmultiply" 
     android:onClick="calcmultiply"/> 

    <Button 
     android:id="@+id/Button02" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/button2" 
     android:layout_alignBottom="@+id/button2" 
     android:layout_toRightOf="@+id/button2" 
     android:text="@string/btndivide" 
     android:onClick="calcdivide"/> 

</RelativeLayout> 
+2

您正在對空字符串調用Integer.parseInt。它崩潰。不要這樣做。 – njzk2

+2

發佈堆棧跟蹤。總是。 –

+0

我在手機上運行它沒有stracktrace – Odie

回答

0

在您如果在您測試的EditTexts是空的結構,改變這一切四:

else{ 

} 
Integer num1text = Integer.parseInt(number1text.getText().toString()); 
Integer num2text = Integer.parseInt(number2text.getText().toString()); 
Integer ans = num1text + num2text; // +, -, * or/depending 

TextView answer = (TextView) findViewById(R.id.ans); 
answer.setText("Answer:" + ans.toString()); 

這個(代碼需要要else塊):

else{ 
    Integer num1text = Integer.parseInt(number1text.getText().toString()); 
    Integer num2text = Integer.parseInt(number2text.getText().toString()); 
    Integer ans = num1text + num2text; 

    TextView answer = (TextView) findViewById(R.id.ans); 
    answer.setText("Answer:" + ans.toString()); 
} 

此外,在每個敬酒的,改變getBaseContext()getApplicationContext()

8
else{ 

    } 
    Integer num1text = Integer.parseInt(number1text.getText().toString()); 
    Integer num2text = Integer.parseInt(number2text.getText().toString()); 
    Integer ans = num1text + num2text; 

    TextView answer = (TextView) findViewById(R.id.ans); 
    answer.setText("Answer:" + ans.toString()); 

你做其他{}語句之外你的工作,如果他們是空的,你正在檢查這很好,但如果它們是空的「」,你仍然嘗試通過在其他括號之外進行計算。 你應該改變什麼,我已經如下圖所示...

else{ 
     Integer num1text = Integer.parseInt(number1text.getText().toString()); 
     Integer num2text = Integer.parseInt(number2text.getText().toString()); 
     Integer ans = num1text + num2text; 

     TextView answer = (TextView) findViewById(R.id.ans); 
     answer.setText("Answer:" + ans.toString()); 

     } 
+0

我會檢查,看看它是否工作 – Odie

+0

仍然崩潰... – Odie

+0

堅持一秒,我要運行它在我的模擬器,看看怎麼了,因爲我我很難知道你的問題沒有堆棧跟蹤 –

1

即使這是不是你目前的問題

  1. 還要確保你檢查你是不是由0 分您的分工功能:
    Integer ans = num1text/num2text;
  2. 您可以簡化您的代碼,創建一個功能,執行當前在每個功能中重複的 (幹;不要重複在你自己)

@ 1:例如,通過添加其他的if/else在你的部門功能:

public void calcdivide(View v) { // here 
     if (number1text.getText().toString().isEmpty() || number2text.getText().toString().isEmpty()) { 
      Toast msg = Toast.makeText(getBaseContext(), 
      "You Should Put Numbers To Do Calculation", 
      Toast.LENGTH_LONG); 
      msg.show(); 
     } 
     else{ 
      Integer num1text = Integer.parseInt(number1text.getText().toString()); 
      Integer num2text = Integer.parseInt(number2text.getText().toString()); 
      if (num2text>0) 
      { 
      //only do the division if divisor > 0 
      Integer ans = num1text/num2text; 
      TextView answer = (TextView) findViewById(R.id.ans); 
      answer.setText("Answer:" + ans.toString()); 
      } 
      else 
      { 
      //e.g. show a toastmessage here 
      } 
     } 
    } 
+0

我該怎麼做? – Odie

+0

見上文。我改進了我的答案 –

相關問題