Java 筛选器-结果如何可以为null而不是大小为0的数组

Java 筛选器-结果如何可以为null而不是大小为0的数组,java,android,filter,Java,Android,Filter,下面是适配器中的简单筛选器类: public class Adapter extends ArrayAdapter<T> { private List<T> origItems; private List<T> filteredData = null; private ItemFilter mFilter = new ItemFilter(); public AdapterAppOrContact(Context contex

下面是适配器中的简单筛选器类:

public class Adapter extends ArrayAdapter<T>
{
    private List<T> origItems;
    private List<T> filteredData = null;
    private ItemFilter mFilter = new ItemFilter();

    public AdapterAppOrContact(Context context, List<T> items)
    {
        super(context, R.layout.row_adapter_app, items);
        origItems = items;
        filteredData = items;
    }

    @Override
    public int getCount() {
        return filteredData.size();
    }

    // ....

    private class ItemFilter extends Filter 
    {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) 
        {
            String filterString = constraint.toString().toLowerCase();
            FilterResults results = new FilterResults();
            final List<T> list = origItems;
            int count = list.size();
            final ArrayList<T> newList = new ArrayList<T>(count);
            String filterableString ;

            for (int i = 0; i < count; i++)
            {
                filterableString = list.get(i).getName();
                if (filterableString.toLowerCase().contains(filterString)) 
                {
                    newList.add(list.get(i));
                }
            }

            results.values = newList;
            results.count = newList.size();
            return results;
        }

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) 
        {
            filteredData = (ArrayList<T>) results.values;
            notifyDataSetChanged();
        }
    }
}

发布您的FilterResults类代码环境是多线程的吗?您是说您正在使用非空值调用
publishResults
?您如何知道,您正在使用调试器?
FilterResults
是一个嵌套在基
android.widget.Filter
类中的类。我不知道
publishResults
调用时使用非null,但我知道是因为一个崩溃报告,之后的
notifyDataSetChanged
将通知适配器,该适配器将访问
Filteredata
变量,这将与
NullPointerException
崩溃,因为
Filteredata
是null@markspace没错,过滤是异步完成的,我没有地方将
filteredData
设置为null,并且在主线程上调用
publishResults
。一种可能的解释是根本不调用
publishResults(…)
。如果
通过未检查的异常执行过滤
,会发生这种情况吗?如果
items
/
origItems
null
,会发生什么情况?发布过滤器结果类代码是多线程环境吗?您是说您正在使用非空值调用
publishResults
?您如何知道,您正在使用调试器?
FilterResults
是一个嵌套在基
android.widget.Filter
类中的类。我不知道
publishResults
调用时使用非null,但我知道是因为一个崩溃报告,之后的
notifyDataSetChanged
将通知适配器,该适配器将访问
Filteredata
变量,这将与
NullPointerException
崩溃,因为
Filteredata
是null@markspace没错,过滤是异步完成的,我没有地方将
filteredData
设置为null,并且在主线程上调用
publishResults
。一种可能的解释是根本不调用
publishResults(…)
。如果
通过未检查的异常执行过滤
,会发生这种情况吗?如果
/
源项
,会发生什么情况?
java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
    at com.app.package.adapters.AdapterAppOrContact.getCount(AdapterAppOrContact.java:40)
    at android.widget.AdapterView$AdapterDataSetObserver.onChanged(AdapterView.java:828)
    at android.widget.AbsListView$AdapterDataSetObserver.onChanged(AbsListView.java:6373)
    at android.database.DataSetObservable.notifyChanged(DataSetObservable.java:37)
    at android.widget.BaseAdapter.notifyDataSetChanged(BaseAdapter.java:50)
    at android.widget.ArrayAdapter.notifyDataSetChanged(ArrayAdapter.java:310)
    at com.app.package.adapters.AdapterAppOrContact$ItemFilter.publishResults(AdapterAppOrContact.java:129)
    ...