0

ボタンと編集テキストがあります。ユーザーは数字を入力してボタンをクリックします。すると、その数字で何かが起こります。

ただし、編集テキストが空白の場合、エラーが発生します。これを修正するにはどうすればよいですか? 以下の私のコードは私の試みです..しかし、次のエラーが発生してアプリが閉じられるため、機能しません。

E/AndroidRuntime(324): java.lang.NumberFormatException: '' を整数として解析できません

public void onClick(View arg0) {
    // TODO Auto-generated method stub
    switch (arg0.getId()) {
    case R.id.bBankDeposit:
        deposit();
        break;
    case R.id.bBankWithdraw:
        withdraw();
        break;
    }
}

public void deposit() {
    String d = etDepositAmount.getText().toString();
    Integer depositAmount = Integer.valueOf(d);

    if (depositAmount > playerCash | depositAmount <= 0
            | etDepositAmount.getText().toString() == "") {
        new AlertDialog.Builder(this).setTitle("Wait")
                .setMessage("Please enter a valid deposit value.")
                .setPositiveButton("OK", null).show();
        etDepositAmount.setText("");
    } else {
        int newBankBalance = playerBalance + depositAmount;
        playerBalance = newBankBalance;
        playerCash = (playerCash - depositAmount);

        bankBalance.setText("Bank Balance: $" + playerBalance);
        cash.setText("Cash in hand: $" + playerCash);
        etDepositAmount.setText("");

        Player stats = new Player(this);
        stats.open();
        stats.bankDeposit(playerId, playerCash, playerBalance);
        stats.close();
    }
}

}

4

4 に答える 4

2

ソリューションの背後にある考え方は正しいです。いくつかの小さな構文エラーがあります。

その場合Integer.valueOf(string)、数値形式の例外を処理する必要があります。これは、指定された文字列に対して確実に Integer を返すことができることを Java が知らせる方法にすぎません。

|ビット単位の OR 演算です。||おそらく、ブール論理を使用して比較するが必要です。次に、文字列を比較するときは、参照ではなく値で比較します。==参照によって比較しますsomeString.equals(someOtherString)が、実際には文字列の内容をチェックします。ただし、すでに整数に解析しているため、実際にそれを行う必要はありません。

これらの修正により、入力が正しくないかどうかがわかり、必要に応じてアラートが表示されます。

だから - 完全な解決策は....

public void deposit() {
    String d = etDepositAmount.getText().toString();
    Integer depositAmount = 0;
    try
    {
       depositAmount = Integer.valueOf(d);
    }
    catch(NumberFormatException ex)
    {
       // Uh oh! Bad input!
    }

    if (depositAmount > playerCash || depositAmount <= 0) 
    {
        new AlertDialog.Builder(this).setTitle("Wait")
                .setMessage("Please enter a valid deposit value.")
                .setPositiveButton("OK", null).show();
        etDepositAmount.setText("");
    } else {
        int newBankBalance = playerBalance + depositAmount;
        playerBalance = newBankBalance;
        playerCash = (playerCash - depositAmount);

        bankBalance.setText("Bank Balance: $" + playerBalance);
        cash.setText("Cash in hand: $" + playerCash);
        etDepositAmount.setText("");

        Player stats = new Player(this);
        stats.open();
        stats.bankDeposit(playerId, playerCash, playerBalance);
        stats.close();
    }
}
于 2012-03-29T00:21:05.183 に答える
0
if (!d.equals("")&&d!=null){
    Integer depositAmount = Integer.valueOf(d);
}
于 2012-03-29T00:19:56.883 に答える
0

解決するには、編集テキストの空の値を確認する必要がありますNumberFormatException

nullまたはの値を確認するには、このコードを参照してくださいblank

if(!TextUtils.isEmpty(text)) {
    //Use it
}else {
    //display validation message
}
于 2012-03-29T14:43:25.257 に答える
0

あなたはキャッチする必要がありますNumberFormatException

String s ="";
int i=0;
try{
i=Integer.parseInt(s);

}catch(NumberFormatException ex){
//Some toast or alert
}
于 2012-03-29T09:07:17.277 に答える