2014-02-20 4 views
1

사용자가 EditText 상자에 값을 입력하지 않으면 초기 값이 0으로 설정됩니다 (충돌 오류를 막기 위해 NumberFormatException이 유효하지 않습니다. 잘못된 int : "") 이 경우 사용자가 입력하지 않았으므로 읽을 정수 값이 아닙니다.이 코드가 왜 던지는 이유는 무엇입니까? NumberFormatException Invalid 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으로 설정되지 않는 이유는 확실하지? 아마 가장 안전도에 비록

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

:

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

답변

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

귀하의 설명에서이 특정 if 문이 true을 반환한다는 것은 쉽게 추론 할 수 있습니다. 따라서 문자열 값이 "0"으로 설정되지 않습니다.

자바 문자열은 프리미티브가 아니므로 비교기 ==과 비교할 수 없습니다. boozeAmount.equals("")처럼 문자열을 비교하려면 equals 메서드를 사용해야합니다.

Apache Commons에는 문자열이 null 또는 비어 있는지 확인할 수있는 StringUtils 유틸리티가 있습니다. isEmptyisBlank을 확인하십시오.

1

에 오류를 던지는 당신은 당신이 .equals()

1

로 변경을과 비교 ==와 문자열을 비교 해달라고 해야 할 일 :

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

당신이 빈 있는지 확인하고 다음 로 채우기 입력을 얻을 수 있습니다.

또한 항상 문자열 값을 .equals과 비교하고 .trim()을 사용하여 공백을 없애기 때문에 잘못된 입력으로 인식됩니다.

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; 
} 
: 당신이 아무것도 알고있는 경우 정수로 구문 분석 할 필요가 없기 때문에

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; 

또는 단지는 이렇게