Federico Ponzi
Federico Ponzi

Reputation: 2785

Android java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1

I've just received this crash log by a user and I can't understand what caused it. My app is a text editor. I have a TextWatcher on the TextView but I'm not sure if that is the problem, since the logcat dosen't contain any line of my app.

java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
at java.util.ArrayList.get(ArrayList.java:304)
at android.widget.TextView.sendOnTextChanged(TextView.java:7231)
at android.widget.TextView.handleTextChanged(TextView.java:7290)
at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:8880)
at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:962)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:496)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30)
at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:672)
at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:435)
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:333)
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)

Upvotes: 3

Views: 3359

Answers (3)

Federico Ponzi
Federico Ponzi

Reputation: 2785

I'm not sure if this can help someone else, but to fix this bug I've done this:

I have an EditText, with a TextWatcher.

The error is raised by this setText call:

editText.setText("");

To solve this I had to:

  1. remove the listener,
  2. set the text to the empty string,
  3. finally, re-add the listener.

Upvotes: 4

Ollie Strevel
Ollie Strevel

Reputation: 871

So late, but for anyone can be useful:

Check if your EditText has the textAllCaps="true" attribute and remove it if needed.

Upvotes: 0

Todd Hodes
Todd Hodes

Reputation: 41

seems this happens if you edit the attached state of a text watcher in the text watcher itself. e.g., i see this happen if i remove the textwatcher in a watcher method itself.

to verify, move the contents of onTextChanged to afterTextChanged, and see if the new stacktrace is triggered from TextView$ChangeWatcher.afterTextChanged instead.

to work around it, move that work to a handler posted from the method, or similar.

Upvotes: 3

Related Questions