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