このエラーの原因はすでにわかっていますが、ユーザーがダイアログ ボックスに何も入力せず、文字列を int に解析するボタンを押した場合の処理方法がわかりません。空の文字列を int に解析できないため、エラーがスローされます。これを行う方法についていくつかの調査を行いましたが、うまくいく満足のいく結果は見つかりませんでした。
問題: 残りのコードを実行する前に、ダイアログ ボックスにテキストがあるかどうかを確認するにはどうすればよいですか。
このエラーの原因はすでにわかっていますが、ユーザーがダイアログ ボックスに何も入力せず、文字列を int に解析するボタンを押した場合の処理方法がわかりません。空の文字列を int に解析できないため、エラーがスローされます。これを行う方法についていくつかの調査を行いましたが、うまくいく満足のいく結果は見つかりませんでした。
問題: 残りのコードを実行する前に、ダイアログ ボックスにテキストがあるかどうかを確認するにはどうすればよいですか。
一部のコードは構文に役立ちますが、基本的には
if ("".equals(text) // where text is the text that you get from an EditText or wherever you get it
{ // give message to enter valid text; }
また、で囲んでtry/catch
numberFormatException をキャッチし、適切なメッセージを出力することもできます
String text = editText.getText().toString();
if(!text.equals("") && text.matches("^\\d+$")){
cast to int
}
問題: 残りのコードを実行する前に、ダイアログ ボックスにテキストがあるかどうかを確認するにはどうすればよいですか。
解決策:if
ステートメント。
int parseToInt(String maybeInt, int defaultValue){
if (maybeInt == null) return defaultValue;
maybeInt = maybeInt.trim();
if (maybeInt.isEmpty()) return defaultValue;
return Integer.parseInt(maybeInt);
}
余分な依存関係を回避できる場合は、Common Lang StringUtils をプルして、trim/isEmpty の代わりに StringUtils.isBlank を使用します。これは Unicode も処理するためです。
同じエラーが原因でアプリケーションがクラッシュしました。 答えは簡単です - コードを
試す{ }
と
キャッチ()
このコード snip.This Works のように、Exception を引き起こすブロック。
public void setAge(String age) {
final Calendar c = Calendar.getInstance();
int yearCurrent = c.get(Calendar.YEAR);
try {
int yearPrev = (int) Integer.parseInt(age.substring(0, 4));//this line was causing the error
int ageYear=yearCurrent-yearPrev;
ageUser="Age : "+Integer.toString(ageYear);
}
catch(NumberFormatException numberEx) {
System.out.print(numberEx);
}
}