2014-02-20 54 views
1

我想要如果用戶沒有在EditText框中輸入一個值,初始值設置爲0(以防止崩潰錯誤NumberFormatException Invalid int:「」),這是因爲在那裏拋出沒有要讀取的整數值,因爲在這種情況下用戶沒有輸入一個值。爲什麼此代碼引發NumberFormatException無效int:「」?

我已經嘗試了很多事情最近這樣的:

String boozeAmount = boozeConsumed.getText().toString(); 

     if (boozeAmount == "" || boozeAmount == null){ 
      boozeConsumed.setText("0"); 
      boozeAmount = boozeConsumed.getText().toString(); 
     } 
     int boozeOz = Integer.parseInt(boozeAmount) * 12; 
     double beerCalc = boozeOz * 4 * 0.075; 

但似乎仍然拋出了同樣的錯誤,不知道爲什麼INT值沒有被設置爲0?

投擲

int boozeOz = Integer.parseInt(boozeAmount) * 12; 

回答

1
if (boozeAmount == "" || boozeAmount == null){ 

從您的解釋中可以很容易地推斷出,該特定的if語句返回true,這就是爲什麼您的字符串值未設置爲「0」。

Java中的字符串不是原始的,即它們不能與比較器==進行比較。 您需要使用方法equals來比較字符串,如boozeAmount.equals("")

Apache Commons有一個StringUtils實用程序,可以檢查字符串是否爲空或空。 退房isEmptyisBlank

1

錯誤你不比較==字符串你.equals()

1

將其更改爲比較:

if (boozeAmount.equals("") || boozeAmount == null) 

雖然它可能是最安全的還做:

if (...) 
{ 
    // just set it to zero and skip even trying to parse 
} 
else 
{ 
    // do the actual parsing 
} 
1

無論何時從EditText獲取字符串值時總是修剪該變量以避免來自EditText的任何white spaces

String boozeAmount = boozeConsumed.getText().toString().trim();     // apply Trim 

// Always compare strings with `equals()` method in Java & Android 
if (boozeAmount.equals("") || boozeAmount == null) 
{ 
    boozeConsumed.setText("0"); 
    boozeAmount = boozeConsumed.getText().toString(); 
} 
    int boozeOz = Integer.parseInt(boozeAmount) * 12; 
    double beerCalc = boozeOz * 4 * 0.075; 
1

你可以檢查它是否是空白的,然後用0和填充它,然後獲得輸入。

此外,請始終將字符串值與.equals進行比較,並使用.trim()擺脫空白,以便將其識別爲無效輸入。

if (boozeConsumed.getText().toString().trim().equals("")) { 
// if (boozeConsumed.length() == 0) { // doesn't consider spaces though 
    boozeConsumed.setText("0"); 
} 

String boozeAmount = boozeConsumed.getText().toString(); 
int boozeOz = Integer.parseInt(boozeAmount) * 12; 
double beerCalc = boozeOz * 4 * 0.075; 

或者只是這樣做,因爲你並不需要把它解析爲一個整數,如果你知道有什麼也沒有:

String boozeAmount = boozeConsumed.getText().toString(); 

int boozeOz = 0; 
double beerCalc = 0; 

if (boozeAmount.trim().equals("") || boozeAmount == null){ 
    boozeConsumed.setText("0"); 
    boozeAmount = boozeConsumed.getText().toString(); 
} else { 
    // only parse it if there's something there 
    boozeOz = Integer.parseInt(boozeAmount) * 12; 
    beerCalc = boozeOz * 4 * 0.075; 
} 
相關問題