2013-04-06 2 views
0

В моем приложении у меня есть два текстовых поля и один элемент. Это приложение вычисляет целочисленное значение в этих текстовых файлах. Но если я помещаю туда текст - имею ошибку. Как я могу проверить это текстовое поле для int и как показать сообщение, если нет целых чисел. Моя попытка:Как получить тип переменной?

EditText num1text=(EditText)findViewById(R.id.num1text); 
EditText num2text=(EditText)findViewById(R.id.num2text);   
Float num1=Float.parseFloat(num1text.getText().toString()); 
Float num2=Float.parseFloat(num2text.getText().toString()); 

if (num1 instanceof Float && num2 instanceof Float) 
{ 
Float answ = (num1 * num2)/100; 
TextView answer=(TextView)findViewById(R.id.ans); 
answer.setText(answ); 
}else 
answer.setText("Message"); 

Но мое приложение все еще не показывает мое сообщение в другом случае.

ответ

4

Как некоторые другие комментировал, вы можете использовать регулярное выражение для проверки содержимого поля ввода, прежде чем начать их преобразования. Это хорошая рекомендация, вы должны очистить любые пользовательские входы перед использованием.

Если вы этого не сделаете или не можете: операция Float.parseFloat() выдает NumberFormatException, если вход не может быть преобразован. Чтобы избежать этого, вам нужно использовать конструкцию try...catch.

try { 
    Float num1=Float.parseFloat(num1text.getText().toString()); 
    Float num2=Float.parseFloat(num2text.getText().toString()); 
    Float answ = (num1 * num2)/100; 
    TextView answer=(TextView)findViewById(R.id.ans); 
    answer.setText(answ); 
} catch (NumberFormatException e) { 
    TextView answer=(TextView)findViewById(R.id.ans); 
    answer.setText("Message"); 
} 

Кроме того, вы можете использовать атрибут android:inputType в макете XML, чтобы ограничить ввод только цифр (и получить цифровую клавиатуру).

+0

Спасибо, Barend –

0

Если вход исправлен, вам необходимо всегда иметь значение integer/real (Number), то вы можете установить inputtype в свой XML-файл для EditText как атрибут для числа.

Это softkeyboard шоу только цифровые клавиши на экране, так что вы можете получать всегда число, и нет необходимости для проверки пользовательского типа ввода ли символ или числовое значение

Для например, как это

<EditText android:inputType="number" 
.../> 
1

Вы должны использовать регулярное выражение:

if (YourVariable.matches("^[0-9,;]+$")) { 
    // Contains only numbers 
} else { 
    // Contains NOT only numbers 
} 
+0

Я не могу использовать это для Float –

0

Float.parseFloat (. Num2text.getText() ToString()); if not float выбрасывает исключение в числовом формате. Поймать исключение. Очистите поля. Отобразите сообщение тоста, что вход недействителен.

public class MainActivity extends Activity { 
TextView answer; 
EditText num1text,num2text; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    num1text=(EditText)findViewById(R.id.editText1); 
    num2text=(EditText)findViewById(R.id.editText2); 
    Button b= (Button) findViewById(R.id.button1); 
    answer = (TextView) findViewById(R.id.textView2); 
    b.setOnClickListener(new OnClickListener() 
    { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      try 
      { 
      Float num2=Float.parseFloat(num2text.getText().toString()); 
      Float num1=Float.parseFloat(num1text.getText().toString()); 
          //if the numbers are not float throws a numberformat exception 
      if (num1 instanceof Float && num2 instanceof Float) 
      { 
      Float answ = (num1 * num2)/100; 
      answer.setText(Float.toString(answ)); 
      }else 
      answer.setText("Message"); 
      } 
      catch(NumberFormatException e) 
      { 
           //catch the exception clear the fields and display toast 
       num1text.setText(""); 
       num2text.setText(""); 
       Toast.makeText(MainActivity.this, "Invalid Input Type!Check the input", 1000).show(); 
       e.printStackTrace(); 
      } 

     } 

    }); 

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