에러발생
java.lang.NumberFormatException: empty String
Double.parseDouble을 사용하는 과정에서 에러가 발생
xml 코드
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/EditText_et"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="input number"
android:inputType="numberDecimal"
android:maxLength="4">
</EditText>
</RelativeLayout>
java코드
public class MainActivity extends AppCompatActivity {
public class InputFilterMinMax implements InputFilter{
private int min,max;
public InputFilterMinMax(int min, int max){
this.min = min;
this.max = max;
}
public InputFilterMinMax(String min, String max){
this.min = Integer.parseInt(min);
this.max = Integer.parseInt(max);
}
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
try {
int input = Integer.parseInt(dest.toString() + source.toString());
if (isInRange(min, max, input))
return null;
} catch (NumberFormatException nfe) { }
return "";
}
private boolean isInRange(int a, int b, int c) {
return b > a ? c >= a && c <= b : c >= b && c <= a;
}
}
EditText EditText_et;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText_et = findViewById(R.id.EditText_et);
EditText_et.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if(Double.parseDouble(EditText_et.getText().toString()) > 99){
String N = "99";
EditText_et.setText(N);
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
}
}
오류원인코드
Double.parseDouble 이나 Integer.paseInt 메소드는 인자로 들어오는 String에 아무것도 없을 경우 에러를 발생시킵니다.
이는 NumberFormatException 의 예외 중 하나입니다.
따라서 이를 해결하기 위해
try catch 예외처리 구문을 사용해야합니다.
해결방법
왼쪽의 코드를 ->> 오른쪽처럼 바꿔주시면 됩니다.
catch 밑의 부분은 방문자분께서 어떤 상황이 오류인지 알 수있게 추가적으로 넣어둔 코드 입니다.
Toast 코드를 다 지우고 return; 만 넣으셔도 무방합니다.
값이 없을 때 예외가 발생하며
이것은 catch 구문에 의해 저런식으로 toastmessage를 출력하는 것입니다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
java 4강 this 란 무엇인가요? (0) | 2021.10.29 |
---|---|
Android TextInputEditText hint color 변경하는 방법 (0) | 2021.10.28 |
class is public, should be declared in a file named .java 에러 해결 (0) | 2021.10.25 |
How to make Android button circle (안드로이드 원형 버튼 구현 방법) (0) | 2021.10.24 |
Android java edittext null 값일 때 activity 진행 일시정지 하는 방법 (0) | 2021.10.23 |