0

私のアプリケーションには、2 つのテキストフィールドと 1 つの送信があります。このアプリは、このテキストフィールドの整数値を計算します。しかし、そこにテキストを入れると、エラーが発生します。このテキスト フィールドの 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

4 に答える 4

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 で属性を使用して、入力を数字のみに制限できます (数字キーボードを取得できます)。

于 2013-04-06T09:51:12.877 に答える
1

正規表現を使用する必要があります。

if (YourVariable.matches("^[0-9,;]+$")) {
    // Contains only numbers
} else {
    // Contains NOT only numbers
}
于 2013-04-06T09:51:58.337 に答える
0

常に整数/実数 (Number) 値が必要であるという入力が修正された場合はinputtype、xml ファイルでEditTextas 属性を number に設定できます。

これにより、ソフトキーボードは画面に数字キーのみを表示するため、常に数字を取得でき、ユーザーが文字または数字の値を入力するかどうかを確認する必要はありません

たとえば、このような

<EditText android:inputType="number"
.../>
于 2013-04-06T09:50:51.953 に答える
0

Float.parseFloat(num2text.getText().toString()); 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();
            }

        }

    });

}
}
于 2013-04-06T10:05:22.150 に答える