Barre de recherche StringIndexOutOfBoundsException editText
Bonjour à tous(tes),
en avançant sur mon projet, je me vois lutter devant un problème que je n'arrive pas à résoudre.
Voulant gérer une fonction de recherche sur une ListView j'ai donc utilisé un EditText.
Je me pose le problème actuel: ma méthode fonctionne bien lorsque je rentre 2 caractères dans l'EditText et ne laisse apparaître que les items contenant en "Name" ce que je lui passe, mais lorsque je rentre un troisième caractère l'application plante et voici mon log :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| 09-14 16:49:05.647: E/AndroidRuntime(20020): FATAL EXCEPTION: main
09-14 16:49:05.647: E/AndroidRuntime(20020): java.lang.StringIndexOutOfBoundsException: length=2; regionStart=0; regionLength=3
09-14 16:49:05.647: E/AndroidRuntime(20020): at java.lang.String.startEndAndLength(String.java:593)
09-14 16:49:05.647: E/AndroidRuntime(20020): at java.lang.String.substring(String.java:1474)
09-14 16:49:05.647: E/AndroidRuntime(20020): at java.lang.String.subSequence(String.java:1861)
09-14 16:49:05.647: E/AndroidRuntime(20020): at com.android.bordeaux.code.MyListActivity$3.onTextChanged(MyListActivity.java:126)
09-14 16:49:05.647: E/AndroidRuntime(20020): at android.widget.TextView.sendOnTextChanged(TextView.java:8315)
09-14 16:49:05.647: E/AndroidRuntime(20020): at android.widget.TextView.handleTextChanged(TextView.java:8362)
09-14 16:49:05.647: E/AndroidRuntime(20020): at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:8725)
09-14 16:49:05.647: E/AndroidRuntime(20020): at android.text.SpannableStringBuilder.sendTextChange(SpannableStringBuilder.java:892)
09-14 16:49:05.647: E/AndroidRuntime(20020): at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:352)
09-14 16:49:05.647: E/AndroidRuntime(20020): at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:266)
09-14 16:49:05.647: E/AndroidRuntime(20020): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:443)
09-14 16:49:05.647: E/AndroidRuntime(20020): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:420)
09-14 16:49:05.647: E/AndroidRuntime(20020): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:29)
09-14 16:49:05.647: E/AndroidRuntime(20020): at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:667)
09-14 16:49:05.647: E/AndroidRuntime(20020): at android.view.inputmethod.BaseInputConnection.commitText(BaseInputConnection.java:188)
09-14 16:49:05.647: E/AndroidRuntime(20020): at com.android.internal.widget.EditableInputConnection.commitText(EditableInputConnection.java:149)
09-14 16:49:05.647: E/AndroidRuntime(20020): at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:279)
09-14 16:49:05.647: E/AndroidRuntime(20020): at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77)
09-14 16:49:05.647: E/AndroidRuntime(20020): at android.os.Handler.dispatchMessage(Handler.java:99)
09-14 16:49:05.647: E/AndroidRuntime(20020): at android.os.Looper.loop(Looper.java:137)
09-14 16:49:05.647: E/AndroidRuntime(20020): at android.app.ActivityThread.main(ActivityThread.java:4517)
09-14 16:49:05.647: E/AndroidRuntime(20020): at java.lang.reflect.Method.invokeNative(Native Method)
09-14 16:49:05.647: E/AndroidRuntime(20020): at java.lang.reflect.Method.invoke(Method.java:511)
09-14 16:49:05.647: E/AndroidRuntime(20020): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
09-14 16:49:05.647: E/AndroidRuntime(20020): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
09-14 16:49:05.647: E/AndroidRuntime(20020): at dalvik.system.NativeStart.main(Native Method) |
voici mon code actuel :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| inputSearch = (EditText) findViewById(R.id.inputSearch);
inputSearch.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count)
{
textlength = inputSearch.getText().length();
String query = inputSearch.getText().toString();
arr_sort.clear();
for(int i=0;i < currentArray.size();i++)
{
if(textlength <= currentArray.get(i).getName().length())
{
String[] wordArray = currentArray.get(i).getName().split(" ");
for (int j = 0; j < wordArray.length; j++)
{
if(query.equalsIgnoreCase((String) wordArray[j].subSequence(0, textlength)))
{
arr_sort.add(currentArray.get(i));
break;
}
}
}
}
list_adapter = new announcersListAdapter(MyListActivity.this, R.layout.tab_list_item, arr_sort);
setListAdapter(list_adapter);
}
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
public void afterTextChanged(Editable s) {
}
}); |
Merci de m'aider :)