用getFilter()'在null对象引用上

时间:2015-11-21 22:09:53

标签: nullpointerexception searchview

我试图在列表视图上实现搜索 这是我的自定义适配器:

public class AllContactsAdapter extends BaseAdapter implements Filterable {

Context context;
ArrayList<Contact> contactList;
ArrayList<Contact> mStringFilterList;
ValueFilter valueFilter;

public AllContactsAdapter(Context context, ArrayList<Contact> list) {
    this.context = context;
    contactList = list;
    mStringFilterList = list;
}


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

@Override
public Object getItem(int position) {
    return contactList.get(position);
}

@Override
public long getItemId(int position) {
    return contactList.get(position).getID();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    Contact item = contactList.get(position);
    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.row_name_phone_view, null);

    }
    TextView name = (TextView) convertView.findViewById(R.id.txtAllFullName);
    name.setText(item.getName());
    TextView phone = (TextView) convertView.findViewById(R.id.txtAllPhoneNumber);
    phone.setText(item.getPhoneNumber());

    return convertView;
}

@Override
public Filter getFilter() {
    if (valueFilter == null) {
        valueFilter = new ValueFilter();
    }
    return valueFilter;
}

private class ValueFilter extends Filter {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        FilterResults results = new FilterResults();

        if (constraint != null && constraint.length() > 0) {
            ArrayList<Contact> filterList = new ArrayList<Contact>();
            for (int i = 0; i < mStringFilterList.size(); i++) {
                if ((mStringFilterList.get(i).getName().toUpperCase())
                        .contains(constraint.toString().toUpperCase())) {

                    Contact contact = new Contact(mStringFilterList.get(i)
                            .getName(), mStringFilterList.get(i)
                            .getPhoneNumber());

                    filterList.add(contact);
                }
            }
            results.count = filterList.size();
            results.values = filterList;
        } else {
            results.count = mStringFilterList.size();
            results.values = mStringFilterList;
        }
        return results;

    }

    @Override
    protected void publishResults(CharSequence constraint,
                                  FilterResults results) {
        contactList = (ArrayList<Contact>) results.values;
        notifyDataSetChanged();
    }

}

}

这是我在主要活动中的号召:

 @Override
public boolean onQueryTextChange(String newText) {
    adapter.getFilter().filter(newText);
    return false;
}

我收到此错误:

  

java.lang.NullPointerException:尝试调用虚方法&#39; android.widget.Filter com.example.shaka.contactsmanager.AllContactsAdapter.getFilter()&#39;在空对象引用上

你能帮我吗?

1 个答案:

答案 0 :(得分:1)

变量adapter为空,您尝试在其上调用方法getFilter()

您需要在使用之前初始化适配器变量。我无法确定如何操作,因为我无法看到MainActivity代码,但它确定了这个问题。