空对象引用上的 getFilter()'

getFilter()' on a null object reference

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

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();
    }

}

}

这是我的主要电话 activity:

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

我收到这个错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.widget.Filter com.example.shaka.contactsmanager.AllContactsAdapter.getFilter()' on a null object reference

你能帮帮我吗?

变量 adapter 为 null,您正在尝试对其调用方法 getFilter()

您需要在使用之前初始化适配器变量。我不确定该怎么做,因为我看不到 MainActivity 代码,但这肯定是这个问题。