TextWatcher를 이용하여 숫자가 EditText에 입력될 때 천 단위마다 콤마가 찍히게 했는데요,

 

숫자를 12,345 이렇게 입력했다가 지울 때 마지막 한 자리 숫자까지 지워지면 강제종료가 됩니다.

 

그런데 EditText의 길이가 0일때를 따로 처리해주니 강제종료가 되지 않는데요,

 

무슨 이유때문인지 궁금합니다.

 

코드에 처리해준대로 사용해도 아무 이상이 없는 것인지도 궁금하구요. 

 

 package test.decimal;
import java.text.DecimalFormat;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class DecimalTestActivity extends Activity {
    
 DecimalFormat df = new DecimalFormat("###,###");
 
 String result = "";
 String clicked_result = "";
    
    EditText meterEditText = null;
    Button ok_btn = null;
    TextView text = null;
 
 TextWatcher watcher = new TextWatcher() {
  @Override
  public void afterTextChanged(Editable s) {}
  @Override
  public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
  @Override
  public void onTextChanged(CharSequence s, int start, int before, int count) {
   /*if(meterEditText.length() < 1) {
    //Toast.makeText(getApplicationContext(), meterEditText.getError(), Toast.LENGTH_SHORT);
    Log.e("Test","meterEditText.length() : " + meterEditText.length());
    //meterEditText.setText("0");
    //meterEditText.setHint("금액을 입력해주세요.");
    
   } else {*/
    if(!s.toString().equals(result)) {
     result = df.format(Long.parseLong(s.toString().replaceAll(",", "")));
     Log.e("Good", "meterEditText.length() : " + meterEditText.length());
     meterEditText.setText(result);
     meterEditText.setSelection(result.length());
    }//if in else
   //}//else
  }//onTextChanged
  
 };//TextWatcher
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        meterEditText = (EditText)findViewById(R.id.meterEditText);
        ok_btn = (Button)findViewById(R.id.ok_btn);
        text = (TextView)findViewById(R.id.text);
        
        meterEditText.addTextChangedListener(watcher);
        
        ok_btn.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    text.setText(meterEditText.getText().toString());
   }
  });
    }
}

 

 

아래는 if문 처리를 하지 않았을 때 강제종료시 나타나는 에러로그입니다.

05-29 15:52:22.187: E/AndroidRuntime(6053): FATAL EXCEPTION: main
05-29 15:52:22.187: E/AndroidRuntime(6053): java.lang.NumberFormatException:
05-29 15:52:22.187: E/AndroidRuntime(6053):  at java.lang.Long.parseLong(Long.java:337)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at java.lang.Long.parseLong(Long.java:311)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at test.decimal.DecimalTestActivity$1.onTextChanged(DecimalTestActivity.java:43)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.widget.TextView.sendOnTextChanged(TextView.java:6321)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.widget.TextView.handleTextChanged(TextView.java:6362)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:6511)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.text.SpannableStringBuilder.sendTextChange(SpannableStringBuilder.java:889)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:400)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:269)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:432)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:218)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:28)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.text.method.BaseKeyListener.backspace(BaseKeyListener.java:61)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.text.method.BaseKeyListener.onKeyDown(BaseKeyListener.java:124)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:134)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.widget.TextView.doKeyDown(TextView.java:4454)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.widget.TextView.onKeyDown(TextView.java:4288)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.view.KeyEvent.dispatch(KeyEvent.java:1326)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.view.View.dispatchKeyEvent(View.java:3871)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1733)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1148)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.app.Activity.dispatchKeyEvent(Activity.java:2073)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1709)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2566)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.view.ViewRoot.handleMessage(ViewRoot.java:2014)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.os.Looper.loop(Looper.java:130)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at android.app.ActivityThread.main(ActivityThread.java:3835)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at java.lang.reflect.Method.invokeNative(Native Method)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at java.lang.reflect.Method.invoke(Method.java:507)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
05-29 15:52:22.187: E/AndroidRuntime(6053):  at dalvik.system.NativeStart.main(Native Method)

 

처음 질문하는데요, 공지사항 읽었는데 틀린부분 있으면 지적부탁드립니다.^^;