0

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

@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

4 回答 4

0

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

我尽量不使用.size()but.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循环中的更改。我在您的代码中看不到更多我可以提供帮助的内容。

于 2013-09-13T05:05:28.267 回答
0

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

String Name = masterarr.get(i).getName();
if (Name.startsWith(searchString)) {
   type_name_filter.add(masterarr.get(i));
}
于 2013-09-13T04:52:31.207 回答
0


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

if(newtext==null) return true;


然后尝试

于 2013-09-13T05:18:47.000 回答
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));

它会为你工作,它会删除这个例外。

于 2013-09-13T04:38:02.457 回答