마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

EditText 입력, 복사, 붙여넣기 중의 에러 발생

0 추천

 

EditText 를 아마존에서 테스트했는데, 아래와 같은 메세지가 나왔어요 

어떻게 해야 해결이 되나요? 

고수님의 답변 부탁드립니다 

 

스크린샷의 내용 

입력하고 복사해서 붙여넣고, 

여러번 하더니만 아래와 같은 에러메세지가 나와요 

에러기종 : Samsung Galaxy S6 (T-Mobile) 

Info
java.lang.IndexOutOfBoundsException: replace (0 ... -1) has end before start 
// at android.text.SpannableStringBuilder.checkRange(Sp

annableStringBuilder.java:1087) 
// at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:500) 
// at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:225) 
// at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:34) 
// at android.view.inputmethod.BaseInputConnection.deleteSurroundingText(BaseInputConnection.java:246) 
// at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:389) 
// at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:78) 
// at android.os.Handler.dispatchMessage(Handler.java:102) 
// at android.os.Looper.loop(Looper.java:158) 
// at android.app.ActivityThread.main(ActivityThread.java:7229) 
// at java.lang.reflect.Method.invoke(Native Method) 
// at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
// at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
//
Harness
01:07.49
1621
Failed 

 

------------------------------------------------------ 

 

제가 제작한 소스, 아주 간단해요 

TextWatcher txtwt = null; 

txtwt = new TextWatcher(){

@Override

public void afterTextChanged(Editable s) {

Log.i("REACHES AFTER", "YES");

}

@Override

public void beforeTextChanged(CharSequence s, int start, int count, int after) {

Log.i("REACHES BEFORE", "YES");

}

@Override

public void onTextChanged(CharSequence s, int start, int before, int count) {

etTestMemo.removeTextChangedListener(txtwt);//after this line you do the editing code

// text.setText("TEST");

Log.i("REACHES ON", "YES");

etTestMemo.addTextChangedListener(txtwt); // you register again for listener callbacks

}};

 

EditText etTestMemo =  = (EditText)findViewById(R.id.etTestMemo); 

,,, 

etTestMemo.addTextChangedListener(txtwt);

 

여러 기종들은 에러가 안나는데, 위의 삼성 기종 및 여러 기종에서 같은 에러가 나요 

입력 복사하고 붙여넣기하는 과정중에서 에러가 발생해요 

어떻게 예외처리를 해야 되나요? 

고수님, 경험이 있으시면 

고수님의 답변 부탁드립니다 

수고하세요~ 

 

 

앱천사 (380 포인트) 님이 2020년 2월 10일 질문

1개의 답변

0 추천

특정단말에서만 이슈가 생기는것으로 보아선 코드 이슈라기 보단, 타이밍 이슈라 생각되네요.

아무래도  java 객체가  Thread safety를 보장되지 않다보니, 발생한 이슈가 아닐까 합니다.

 값을 사용하기 전에 lock 을 잡아서 다른데서 못 건드리기게 변경 해 보세요

https://heowc.dev/programming-study/repo/java/thread_safe%ED%95%98%EA%B2%8C_%EB%8D%B0%EC%9D%B4%ED%84%B0_%EA%B0%B1%EC%8B%A0%ED%95%98%EA%B8%B0.html

익명사용자 님이 2020년 2월 10일 답변
...