-1

データを入力せずにプログラムのボタンをクリックすると、両方のエラーが並行して表示されます(以下のプログラムで強調表示されています)。ここでは、一度に 1 つのエラーのみを取得する必要があります。つまり、null の場合、適切なエラーが表示されます。その逆も同様です。

b.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        if(v==findViewById(R.id.button1)) {
        et1 = (EditText) findViewById(R.id.editText1);
        if(et1.getText()!=null ) {
        try {
                radius = Double.valueOf(et1.getText().toString());
        }
        catch (Exception e) {
            Toast.makeText(getApplicationContext(), "Please enter correct value", Toast.LENGTH_SHORT).show();
        }
        }

        if(radius==0.0) {
            Toast.makeText(getApplicationContext(), "Value cannot be 0", Toast.LENGTH_SHORT).show();
        }
        try {
            output = (double) Math.round(Math.PI * radius * radius);
            String s = Double.toString(output);
            tv1.setText(s);
        }
        catch (Exception e) {
            Toast.makeText(getApplicationContext(), "Please enter correct value", Toast.LENGTH_SHORT).show();
        }
        }
    }
});
4

1 に答える 1

1

物事を実際のように複雑にしないでください。try/catch ブロックなしで正しい値が入力されたことを確認できます。考えられるアプローチ:

  b.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            switch (v.getId()) {

            case R.id.button1:
                Pattern p = Pattern.compile("([0-9]*)");

                if (et1.getText().toString().trim().length() > 0) {
                    Matcher m = p.matcher(et1.getText().toString().trim());

                    if (m.matches()) {
                        radius = Double.valueOf(et1.getText().toString());
                        output = (double) Math.round(Math.PI * radius
                                * radius);
                        tv1.setText(Double.toString(output));
                    } else
                        Toast.makeText(getApplicationContext(),
                                "incorrect value", Toast.LENGTH_SHORT)
                                .show();
                } else
                    Toast.makeText(getApplicationContext(),
                            "input is empty", Toast.LENGTH_SHORT).show();

                break;

            default:
            }

        }
    });

上記のコードでは、入力されたテキストがあるかどうかを確認します。2 番目のifは、Java 正規表現を使用して入力が数値かどうかをチェックします。両方の要件が満たされると、出力が正しく計算されていることを確認できます。

ところで、スイッチケースを使用することは、クリックリスナーにとってより良いアプローチです

于 2013-02-06T15:42:51.217 に答える