1

EditText から入力された 2 つの数値を加算する簡単なプログラムを実行しています。しかし、ユーザーが [クリックして追加] ボタンをクリックしてフィールドを空のままにすると、プログラムは「残念ながら、プログラムが停止しました」と言って終了します。

コードは次のとおりです。

public class MainActivity extends Activity {

long a, b, sum;
Button add, clr;
EditText e1, e2, res;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    add = (Button) findViewById(R.id.bAdd);
    add.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) throws NumberFormatException {
            // TODO Auto-generated method stub

                e1 = (EditText) findViewById(R.id.tv1);         
                String str1 = e1.getText().toString();

                e2 = (EditText) findViewById(R.id.tv2);
                String str2 = e2.getText().toString();

                try{
                    a = Integer.parseInt(str1);
                    b = Integer.parseInt(str2);
                }catch(NumberFormatException e){
                    res.setText("Please enter valid entries");
                }

                sum = a + b;    

                res = (EditText) findViewById(R.id.result);
                res.setText("Your sum is " + sum);
        }
    });

    clr = (Button) findViewById(R.id.bClr);
    clr.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) throws NumberFormatException {
            // TODO Auto-generated method stub
            e1.setText("");
            e2.setText("");
            res.setText("");
        }
    });
}

}

空白の EditText エントリに対してアプリが「有効なエントリを入力してください」と応答するようにします。

4

4 に答える 4

1

あなたの行:

res = (EditText) findViewById(R.id.result);

を使用する前に res 変数が初期化されるように移動する必要がありますres.setText。catch ステートメントで初期化されていません。下図の位置に移動してください。他のことをするときに初期化できますfindViewById

e1 = (EditText) findViewById(R.id.tv1); 
e2 = (EditText) findViewById(R.id.tv2);
res = (EditText) findViewById(R.id.result);
于 2012-12-13T09:18:17.010 に答える
1

編集テキストからnullテキストを取得しているため..最初にnullを確認してください

@Override
    public void onClick(View v) throws NumberFormatException {
        // TODO Auto-generated method stub

            e1 = (EditText) findViewById(R.id.tv1); 
            e2 = (EditText) findViewById(R.id.tv2);

            if( e1.getText() != null && e2.getText() != null) { 

            String str1 = e1.getText().toString();


            String str2 = e2.getText().toString();

            try{
                a = Integer.parseInt(str1);
                b = Integer.parseInt(str2);
            }catch(NumberFormatException e){
                res.setText("Please enter valid entries");
            }

            sum = a + b;    

            res = (EditText) findViewById(R.id.result);
            res.setText("Your sum is " + sum);
           }
    }
于 2012-12-13T09:14:51.427 に答える
0

NumberFormatException をキャッチする代わりに、try catch ブロックで任意の例外をキャッチできます。取得している Log Cat エラーを投稿してください。

于 2012-12-13T09:19:12.847 に答える
0

はい。

これらの行を追加します。

if (e1.getText().toString() == null || e2.getText().toString() == null)
{
       //Show dialog
}
else
{
    String str1 = e1.getText().toString();
    String str2 = e2.getText().toString();
    try{
                        a = Integer.parseInt(str1);
                        b = Integer.parseInt(str2);
                    }catch(NumberFormatException e){
                        res.setText("Please enter valid entries");
                    }

                    sum = a + b;    

                    res = (EditText) findViewById(R.id.result);
                    res.setText("Your sum is " + sum);
    }
}

警告ダイアログのヘルプのチュートリアル

于 2012-12-13T09:15:17.363 に答える