for (int i = 0; i < data.length; i++) {
if (data[i].toString() != null) {
char a = data[i].toString().charAt(0);
if (a == a1) {
if (distance(data[i], keyword) < 5) {
Log.d("sjdhkshdjjjjjjjjjjjjjj", data[i]);
dist.add(distance(data[i], keyword));
sound.add(data[i]);
}
}
}
}
它在从data [] .tostring()访问第一个字符的行上给出了异常。
答案 0 :(得分:0)
data[i]
可能是一个空的(但已初始化的)字符串,并且您正在尝试推断其第一个字符,因此异常会上升。
正确的检查仍会检查数据是否为空,但也包含至少一个字符;
if (data[i].toString() != null && !data[i].toString().isEmpty())
我也会避免对toString()
的所有调用,只需将其调用一次,将结果保存在临时的String变量中;你只是扔掉了不必要的循环,并且在多任务系统中,每次调用之间的结果可能不同,使得所有代码都变得疯狂。基本上,学习永远是一个好习惯。
答案 1 :(得分:0)
这些更改可以让您避免一些例外
for (int i = 0; i < data.length; i++) {
if(data[i]==null) continue ; //Add this
if (data[i].toString() != null && data[i].toString().length>0) {//Another change
char a = data[i].toString().charAt(0);
if (a == a1) {
if (distance(data[i], keyword) < 5) {
Log.d("sjdhkshdjjjjjjjjjjjjjj", data[i]);
dist.add(distance(data[i], keyword));
sound.add(data[i]);
}
}
}
}