2011-08-12 10 views

答えて

1

Integer.valueOf(String s)に有効な数値ではない文字列を指定すると、NumberFormatExceptionがスローされます。文字列S(

km = settings.getString("km", ""); 
int x; 
try { 
    x = Integer.valueOf(km); 
} catch(NumberFormatException e) { 
    x = 0; 
} 
+1

良い点ですが、最初にIntegerとして値を保存できます。 – Michele

+0

@Michele - これは良い点ですが、通常、コードをできるだけ元に近づけるつもりですが、この場合はおそらく正しいでしょう。 – MByD

+0

2番目のオプションは完全に機能します。ありがとう:) – androniennn

1

Integer.valueOfは.parseInteger持つ新しい整数を作るためにtrys:

km = settings.getString("km", "0"); 

また、あなたが例外をキャッチすることができ、かつx0に設定:0にデフォルト値を変更します)、 ""有効な数値に解析してNumberFormatExceptionを得ることができないようにしてください。

try catchブロックでキャッチするか、文字列でIntegerを作成しないでください。

前:

int x= Integer.valueOf(km); 
if (km != "") { 

後:km文字列が整数として解析できない場合

if (km != "") { 
int x= Integer.valueOf(km); 
1

が例外をスローすることができます。

ただし、ブロックをtry { } catch()ブロックにラップすることはお勧めできません。

SharedPreferencesgetString()メソッドのデフォルト値を設定するという目的は、設定が存在しない場合にデフォルト値を戻すことができるということです。だから、これを解決するためのより良い方法は、このようになり、あなたのsettings.getString(...)の呼び出しを変更することです:

km = settings.getString("km", "0"); 

その後にあなたの後続の呼び出しは、時に失敗する空白を持っていません。

入力文字列は、ユーザーが任意の値を入力できる空白のテキストフィールドから来ていますか?そうであれば、その時点でユーザーが入力した値を検証できます。早期に入力を検証することで、チェック/検証メカニズムをコードの他の領域に分散する必要はありません。

関連する問題