【发布时间】:2018-11-17 21:03:02
【问题描述】:
所以,我使用以下代码过滤 RecylerView。它工作正常。我对它的反应很满意。
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
List<TrailsObject> list_queryResults =new ArrayList<>();
String charString = (constraint ==null) ? "" : constraint.toString();
if (charString.isEmpty()) {
list_queryResults = list_main;
}else{
for (TrailsObject trailsObject : list_main) {
if (trailsObject.getName().toLowerCase().contains(charString)
|| trailsObject.getSummary().toLowerCase().contains(charString)
|| trailsObject.getType().toLowerCase().contains(charString)
|| trailsObject.getLocation().toLowerCase().contains(charString)
)
list_queryResults.add(trailsObject);
}
}
filterResults.values = list_queryResults;
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
listFiltered_main = (List<TrailsObject>) filterResults.values;
notifyDataSetChanged();
}
};
}
如果流氓字段(Name、Summary、Type、Location)为空,toLowerCase() 将抛出 NPE。这还没有发生,但似乎是可能的。我无法控制这个数据库。
我最好的解决方法是什么?每次迭代我都可以对每个字段进行空值检查(似乎很昂贵)。我想知道我是否可以在for loop 周围添加一个try catch 块。我真的愿意接受建议。
【问题讨论】:
-
你可以在
trailsObject类中添加类似containsSummary(String compare)mathod 的内容,它会在.contains()之前检查Summary是否为空,其他字段也是如此
标签: android search nullpointerexception android-recyclerview