2016-01-19 5 views
-2

Я пытаюсь построить базовый калькулятор, но когда я помещаю номер сначала edittext и нажимаю кнопку добавления, он разбивается. Это нормально, когда я добавляю два числа в обоих editTexts. В этом не было никаких проблем. Но проблема возникла, когда я набрал только одно число и добавил add. Он метает NumberFormatException: Invalid int: "". вот мой основной код.EditText crashing простой калькулятор

public class MainActivity extends AppCompatActivity { 
EditText num1; 
EditText num2; 
Button add,sub,multi,div; 
TextView MyResults; 
String Number1 ;//; 
String Number2 ;// 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    num1 = (EditText)findViewById(R.id.num1); 
    num2 = (EditText)findViewById(R.id.num2); 
    add = (Button)findViewById(R.id.Add); 
    sub = (Button)findViewById(R.id.Sub); 
    multi = (Button)findViewById(R.id.Multiple); 
    div = (Button)findViewById(R.id.Divide); 
    MyResults = (TextView)findViewById(R.id.results); 



    add.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Number1 =num1.getText().toString(); 
      Number2 =num2.getText().toString(); 
      int mAdd1 = Integer.valueOf(Number1); 
      int mAdd2 = Integer.valueOf(Number2); 
      int myAdd = mAdd1+mAdd2; 
      MyResults.setText(String.valueOf(myAdd)); 
      Toast.makeText(getApplicationContext(), "Added: "+ myAdd, Toast.LENGTH_LONG).show(); 

     } 
    }); 




}//end OnCreate. 
+1

Ну да, он не может сделать пустую строку целым. Вы должны проверить, пуст ли он, и сделать его «0», если так –

ответ

0

Когда вы покидаете EditText пустой

int mAdd2 = Integer.valueOf(Number2); 

будет врезаться, потому что пустой String не является допустимым Integer (отсюда NumberFormatException).

Вы можете поместить его в Try/уловом, как это:

try { 
    Number1 =num1.getText().toString(); 
    Number2 =num2.getText().toString(); 
    int mAdd1 = Integer.valueOf(Number1); 
    int mAdd2 = Integer.valueOf(Number2); 
    MyResults.setText(String.valueOf(myAdd)); 
    Toast.makeText(getApplicationContext(), "Added: "+ myAdd, Toast.LENGTH_LONG).show(); 
catch (NumberFormatException e) { 
    //Give a toast saying the user did not enter two correct values 
} 

Или же проверьте значение заранее и убедитесь, что ничего не было введено:

number1 =num1.getText().toString(); 
number2 =num2.getText().toString(); 
if (number1.equals("") || number2.equals("")) { 
    //Show error or set numbers to a different value 
} 

Однако для этой работы вы должны предположить, что пользователь не вводил ничего, что недействительно Integer, как письмо, например, путем установки типа ввода EditText на номера.

android:inputType="number" 
+0

Спасибо, что ваш альтернативный код работает нормально. и да, я сделал это уже. Лучший. –

0

Вы должны сделать проверку правильности для пустого текста редактирования и не выполнять вычисления в этом случае.

Вместо этого вы можете использовать метод setError (CharSequence) EditText, в котором вы можете показать пользователю сообщение, почему вход недействителен.

+0

Я просто следовал приведенному выше коду, но хорошо посоветую. –