2012-09-14 55 views
0

推進在我的項目,我與我解決不了問題的戰鬥..搜索欄的StringIndexOutOfBoundsException與EDITTEXT

婉婷在一個ListView,所以我用一個EditText運行搜索功能。

我的問題:我的方法效果很好,當我在的EditText兩個字符,顯示包含我就可以通過「名稱」唯一項目,但是當我拿到的第三個字符,然後應用程序崩潰..

這裏是我的日誌:

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) 

這是我的代碼:

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) { 
        } 
       }); 

感謝幫助我的人:)

+0

''wordArray [j] .subSequence(0,textlength)''看起來很可疑(並且導致崩潰),你想在那條線上做什麼? – harism

+0

我想說我的查詢(在編輯文本中輸入的文本)長度等於我的數組「wordarray」中的一個詞,它具有相同的長度和相同的字符 – eento

回答

1

如果你改變這一行,它會工作得更好嗎?

if(query.equalsIgnoreCase((String) wordArray[j].subSequence(0, textlength))) 

if(query.equalsIgnoreCase(wordArray[j].substring(0, 
          Math.min(wordArray[j].length(), textlength)))) 

+0

是的隊友現在工作正常! TY harism – eento