携带搜索操作时字符串索引超出绑定异常

时间:2013-09-13 04:34:40

标签: android string android-layout android-intent

当我在获取联系人后执行搜索操作时,当我在搜索栏中非常快速地键入字母并且应用程序崩溃时,它会显示此异常。请你帮我解决这个问题。我是否包括代码的一部分也沿着

@Override
public boolean onQueryTextChange(String newtext) {


    String searchString = newtext;
    int textLength = searchString.length();

    ArrayList<Masterlistmodel> type_name_filter = new ArrayList<Masterlistmodel>();

    /* String text = edtField.getText().toString(); */

    for (int i = 0; i <masterarr.size(); i++) {

        String Name = masterarr.get(i).getName();
        if (searchString.equalsIgnoreCase(Name.substring(0,
                textLength))) {
            type_name_filter.add(masterarr.get(i));

        }
    }

    type_name_copy = type_name_filter;

    listUpdate(type_name_copy);



    return true;
}
@Override
public boolean onQueryTextSubmit(String arg0) {
    // TODO Auto-generated method stub
    return false;
}

4 个答案:

答案 0 :(得分:0)

如果要访问超出范围的数组索引,则会得到IndexOutOfBoundsException。例如:

String[] myArray = new String[10];
myArray[10] = "test"; // 10 is out of limits(0-9)

会产生这样的例外。

用这个:

ArrayList<String> result= new ArrayList<String>(); 
Then you can add elements to this list with the following:

// result[i] = trax.substring(s1+4,s2);
result.add(trax.substring(s1+4,s2));

它适用于您,它将删除此异常。

答案 1 :(得分:0)

'textLength'是用户输入的搜索字符串的长度。此长度的条目可能不在您的主列表'masterarr'中。你可以尝试:

String Name = masterarr.get(i).getName();
if (Name.startsWith(searchString)) {
   type_name_filter.add(masterarr.get(i));
}

答案 2 :(得分:0)

我要指出的第一件事是我们不知道masterarr是什么类型的对象,所以我猜测就像是一个ArrayList。

我尝试不使用.size()但使用.length()方法,大小与容量有关,长度与数组中实际项目的数量有关。

另外,正如@rsinha所说,我认为可能的错误是当你尝试执行equalsIgnoreCase方法时,该迭代中的Name变量的长度比字符串类型的长度短由用户,所以我会尝试:

for (int i = 0; i <masterarr.size(); i++) {

    String Name = masterarr.get(i).getName();
    if (searchString.equalsIgnoreCase(Name.substring(0,
            Math.min(textLength,Name.length())))) {
        type_name_filter.add(masterarr.get(i));

    }
}

首先尝试使用.length(),如果不起作用,请尝试for循环中的更改。我在你的代码中看不到我可以提供帮助。

答案 3 :(得分:0)


在方法“ onQueryTextChange ”中添加第一个语句

if(newtext==null) return true;


然后尝试