【问题标题】:Best solution to resolve toLowerCase() null pointer exception in RecylcerView Search解决 RecyclerView 中 toLowerCase() 空指针异常的最佳解决方案
【发布时间】: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();
        }
    };
}

如果流氓字段(NameSummaryTypeLocation)为空,toLowerCase() 将抛出 NPE。这还没有发生,但似乎是可能的。我无法控制这个数据库。

我最好的解决方法是什么?每次迭代我都可以对每个字段进行空值检查(似乎很昂贵)。我想知道我是否可以在for loop 周围添加一个try catch 块。我真的愿意接受建议。

【问题讨论】:

  • 你可以在trailsObject 类中添加类似containsSummary(String compare) mathod 的内容,它会在.contains() 之前检查Summary 是否为空,其他字段也是如此

标签: android search nullpointerexception android-recyclerview


【解决方案1】:

如果你可以使用 java 8. 它的 Java.util.optional 类可以在这些情况下提供帮助。 阅读this

如果您不能或不想使用它,您可以使用Google guava optional,它的作用几乎相同。

【讨论】:

    猜你喜欢
    • 2020-04-12
    • 2023-03-13
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多