2015-09-13 8 views
0

Так что в основном у меня есть проблема. Когда пользователь нажимает кнопку расчета (я делаю калькулятор), не внося значения, которое приносит приложение. Я хочу, чтобы оно отображало сообщение, но я не знаю, как это сделать. (Обновлено)Как остановить сбой программы, когда пользователь не вводит значение?

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.waist2height); { 
     //h is cm edittext 
     final EditText h = (EditText)findViewById(R.id.editText2); 
     final EditText w = (EditText)findViewById(R.id.editText3); 

     final EditText r = (EditText)findViewById(R.id.textView4); 

    }); 

     calculate.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 

      float height=0; 
      float weight=0; 
      float result=0; 



      result = (float) ((weight/height) + 0.005) ; 

      if ((h.getText().toString()).equals("")) 
       { 
        Toast.makeText(getApplicationContext(),"Please enter your height", Toast.LENGTH_SHORT).show(); 
        float height = Float.parseFloat(h.getText().toString()); 
       } 
       if ((w.getText().toString()).equals("")) 
       { 
        Toast.makeText(getApplicationContext(),"Please enter your weight", Toast.LENGTH_SHORT).show(); 
        float weight = Float.parseFloat(w.getText().toString()); 
       } 


      r.setText(String.valueOf(result)); 
      } 

код ниже, где я есть проблема

if ((h.getText().toString()).equals("")) 
       { 
        Toast.makeText(getApplicationContext(),"Please enter your height", Toast.LENGTH_SHORT).show(); 
        float height = Float.parseFloat(h.getText().toString()); 
       } 
       if ((w.getText().toString()).equals("")) 
       { 
        Toast.makeText(getApplicationContext(),"Please enter your weight", Toast.LENGTH_SHORT).show(); 
        float weight = Float.parseFloat(w.getText().toString()); 
       } 

Это лучшее, что я могу придумать, но он не работает.

Вот LogCat (Обновлено)

09-20 18:50:38.509: E/AndroidRuntime(29769): FATAL EXCEPTION: main 
09-20 18:50:38.509: E/AndroidRuntime(29769): Process: com.NovaPlex.personalfitnessfree, PID: 29769 
09-20 18:50:38.509: E/AndroidRuntime(29769): java.lang.NumberFormatException: Invalid float: "" 
09-20 18:50:38.509: E/AndroidRuntime(29769): at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at java.lang.StringToReal.parseFloat(StringToReal.java:308) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at java.lang.Float.parseFloat(Float.java:306) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at com.NovaPlex.personalfitnessfree.WH$2.onClick(WH.java:80) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at android.view.View.performClick(View.java:4780) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at android.view.View$PerformClick.run(View.java:19866) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at android.os.Handler.handleCallback(Handler.java:739) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at android.os.Handler.dispatchMessage(Handler.java:95) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at android.os.Looper.loop(Looper.java:135) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at android.app.ActivityThread.main(ActivityThread.java:5254) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at java.lang.reflect.Method.invoke(Native Method) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at java.lang.reflect.Method.invoke(Method.java:372) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
+0

добавьте полный код метода калькулятора, и LogCat – Moudiz

+0

Используйте 'если (! TextUtils.isEmpty (editText.getText(). ToString()) {} сделать что-то' – Raghunandan

+0

я добавил полный код – Ashraf96

ответ

1

Не используйте == null. Предполагая, что вы сделали , он не может быть пустым. Он не проверяет содержимое.

Это простой способ найти, если EditText пуст. Параметр - это EditText, который вы хотите проверить, и возвращает true для пустых/false для непустых.

private boolean isEmpty(EditText etText) { 
    return etText.getText().toString().trim().length() <= 0; 
} 

EDIT:

с помощью android:id="@+id/someId в XML-файлах, мы говорим Android, чтобы создать новый ресурс с идентификатором выбранным (в данном случае someId) в нашем R.java классе. При выполнении мы присваиваем это значение нашему представлению.

Короче говоря, если OP сделал что-то вроде EditText EditText1 = (EditText) findViewById(R.id.myFistEditText); до и позже он пытается сравнить его в if как (EditText1 == null), это на самом деле не получать значение текста в его EditText, он просто говорит ему, что - да, это мнение было найдено до того и он назначен.

+0

_ «Предполагая, что вы сделали findviewbyid, он не может быть пустым» _... Ухаживать за разъяснением? – Onik

+0

Конечно, см. Мое редактирование – poss

+0

Опять же, этот оператор может быть неверным. Метод может в некоторых случаях возвращать значение null (см. [FindViewByID возвращает null] (http://stackoverflow.com/questions/3264610/findviewbyid-returns-null)). Таким образом, проверка того, является ли она нулевой, не является избыточной. – Onik

1

Вы можете просто попробовать это, чтобы проверить, не введено ли значение в EditText.

if ((EditText1.getText().toString()).equals("")) 
{ 
    Toast.makeText(getApplicationContext(),"Please enter Value1", Toast.LENGTH_LONG).show(); 
} 
if ((EditText2.getText().toString()).equals("")) 
{ 
    Toast.makeText(getApplicationContext(),"Please enter Value2", Toast.LENGTH_LONG).show(); 
} 

В качестве альтернативы, вы можете использовать .matches("") вместо .equals("")

UPDATE

Вы должны сделать это так

if (!(h.getText().toString()).equals("")) 
{ 
    height= Float.parseFloat(h.getText().toString()); 
} 

и

if (!(w.getText().toString()).equals("")) 
{ 
    weight= Float.parseFloat(w.getText().toString()); 
} 

UPDATE

if ((EditText1.getText().toString()).equals("")) 
{ 
    Toast.makeText(getApplicationContext(),"Please enter Value1", Toast.LENGTH_LONG).show(); 
} 
if ((EditText2.getText().toString()).equals("")) 
{ 
    Toast.makeText(getApplicationContext(),"Please enter Value2", Toast.LENGTH_LONG).show(); 
} 
if (!(h.getText().toString()).equals("")) 
{ 
    height= Float.parseFloat(h.getText().toString()); 
} 
if (!(w.getText().toString()).equals("")) 
{ 
    weight= Float.parseFloat(w.getText().toString()); 
} 

Заменить приведенный выше код вместо твоего

+0

Неработающие средства? По-прежнему такая же ошибка в Logcat? Не могли бы вы также отправить logcat .. – Lal

+0

жаль, что я добавил в LogCat – Ashraf96

+0

. Пожалуйста, проверьте мой отредактированный ответ. – Lal

0

Он уже сказал, что вы бы лучше написать метод isEmpty.

Мое предложение вместо написания isEmpty напишите метод под названием isValid, который проверяет, является ли значение желаемым значением, т. Е. Целое, двойное и т. Д.

Таким образом ваша программа не будет сбой при вводе строки.

Смежные вопросы