java - 错误:尝试在空对象引用上调用虚拟方法“void android.widget.Filter.filter(java.lang.CharSequence)”
问题描述
我在 onTextChange Listener 中使用 edit text.so 实现了搜索功能,我调用了 get 过滤器方法。我的适配器是从基本适配器类而不是从 Array 适配器类扩展的。因此,在我的适配器类中,我创建了过滤器方法并在 ontextChange 侦听器中调用该过滤器方法。当我在搜索栏中输入文本时,我的应用程序由于此错误而崩溃:尝试在空对象引用上调用虚拟方法 'void android.widget.Filter.filter(java.lang.CharSequence)'。这是我的适配器类:
public class Splitadapter extends BaseAdapter implements Filterable{
/*
* Variables Declaration section
*
*
*/
private ArrayList<COntactsModel> _Contacts;
private Context mContext;
private LayoutInflater inflater;
private ValueFilter valueFilter;
private ArrayList<COntactsModel> mStringFilterList;
public Splitadapter(Context context,ArrayList<COntactsModel> _Contacts){
super();
mContext = context;
this._Contacts = _Contacts;
mStringFilterList = _Contacts;
this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
getFilter();
}//End of CustomAdapter constructor
public int getCount(){
return _Contacts.size();
}//End of getCount method
public Object getItem(int position){
return _Contacts.get(position).getName();
}//End of getItem method
public long getItemId(int position){
return position;
}//End of getItemId method
public class ViewHolder{
TextView textviewName;
TextView textviewNumber;
CheckBox checkbox;
ImageView image;
int id;
}
public View getView(int position, View convertView, ViewGroup parent){
ViewHolder holder;
final int pos = position;
if (convertView == null){
holder = new ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(R.layout.list, null);
holder.textviewName = (TextView) convertView.findViewById(R.id.name);
holder.textviewNumber = (TextView) convertView.findViewById(R.id.mobile);
holder.checkbox = (CheckBox) convertView.findViewById(R.id.check);
holder.image = convertView.findViewById(R.id.image);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}//End of else
holder.checkbox.setId(position);
holder.textviewName.setId(position);
holder.textviewNumber.setId(position);
holder.textviewName.setText(_Contacts.get(position).getName());
holder.textviewNumber.setText(_Contacts.get(position).getPhonenum());
holder.id = position;
return convertView;
}//End of getView method
@Override
public Filter getFilter() {
if(valueFilter==null) {
valueFilter=new ValueFilter();
}
return null;
}
private class ValueFilter extends Filter {
//Invoked in a worker thread to filter the data according to the constraint.
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results=new FilterResults();
if(constraint!=null && constraint.length()>0){
ArrayList<COntactsModel> filterList=new ArrayList<COntactsModel>();
for(int i=0;i<mStringFilterList.size();i++){
if((mStringFilterList.get(i).getName().toUpperCase())
.contains(constraint.toString().toUpperCase())) {
COntactsModel contacts = new COntactsModel();
contacts.setName(mStringFilterList.get(i).getName());
contacts.setPhonenum(mStringFilterList.get(i).getPhonenum());
filterList.add(contacts);
}
}
results.count=filterList.size();
results.values=filterList;
}else{
results.count=mStringFilterList.size();
results.values=mStringFilterList;
}
return results;
}
//Invoked in the UI thread to publish the filtering results in the user interface.
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
_Contacts=(ArrayList<COntactsModel>) results.values;
notifyDataSetChanged();
}
}
//End of CustomAdapter instance inner class
}
这是我的物品类:
public class COntactsModel
{
String phonenum;
String cname;
public String getPhonenum() {
return phonenum;
}
public void setPhonenum(String phonenum) {
this.phonenum = phonenum;
System.out.println("se ph num"+phonenum);
}
public String getName() {
return cname;
}
public void setName(String name) {
this.cname = name;
}
}
如何解决那个?
解决方案
@Override
public Filter getFilter() {
if(valueFilter==null) {
valueFilter=new ValueFilter();
}
return null;
}
用。。。来代替
@Override
public Filter getFilter() {
if(valueFilter==null) {
valueFilter=new ValueFilter();
}
return valueFilter;
}
推荐阅读
- python - save() 缺少 1 个必需的位置参数“self”
- python - Python:将带有pandas的SQL结果读取到用于for循环的列表中时出现问题
- javascript - POST 请求导致 IPFS 节点的控制台 JS
- c++ - C ++如何将数组值解压缩为函数参数
- mongodb - 猫鼬:在存储字符串而不是objectId时获取未知的objectId
- blockchain - 智能合约将 eth 转移到地址失败
- python - 从 selenium 获取网页的字节数
- rust - 避免同时借用可变和不可变
- matplotlib - 无法调用 matplotlib 属性 v3.2.2
- python - 如何从 python 列表中的字符串中删除 \n1、\n2、\n3 等?