Лучшее решение для разрешения исключения нулевого указателя toLowerCase () в RecylcerView Search - PullRequest
0 голосов
/ 18 ноября 2018

Итак, я фильтрую 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. Это еще не произошло, но кажется возможным. У меня нет контроля над этой базой данных.

Каков мой лучший способ решения этой проблемы? Я мог бы сделать нулевую проверку для каждого поля каждую итерацию (кажется дорогим). Интересно, могу ли я как-нибудь добавить блок try catch вокруг for loop. Я действительно открыт для предложений.

1 Ответ

0 голосов
/ 18 ноября 2018

Если вы можете использовать Java 8. Он имеет класс Java.util.optional , который помогает именно в этих ситуациях. Прочитайте это .

В случае, если вы не можете или не хотите использовать его, вы можете использовать Google guava опционально, который делает почти то же самое.

...