Android 自定义筛选在getView()中引发空指针异常。即使在做了所有必要的空检查之后
在我得到并发修改异常之前。我通过创建一个新的arraylist来避免它。但是,现在我得到了一个空指针异常&奇怪的是,我已经完成了所有必要的空检查。我仍然不明白会出什么问题 以下是我发布结果的方法:Android 自定义筛选在getView()中引发空指针异常。即使在做了所有必要的空检查之后,android,filtering,autocompletetextview,Android,Filtering,Autocompletetextview,在我得到并发修改异常之前。我通过创建一个新的arraylist来避免它。但是,现在我得到了一个空指针异常&奇怪的是,我已经完成了所有必要的空检查。我仍然不明白会出什么问题 以下是我发布结果的方法: @Override protected FilterResults performFiltering(CharSequence constraint) { if (constraint != null) { mSuggestion
@Override
protected FilterResults performFiltering(CharSequence constraint) {
if (constraint != null) {
mSuggestions.clear();
for (Item item : mItemsAll) {
try {
if (item.name.toLowerCase(Locale.US).startsWith(constraint.toString().toLowerCase(Locale.US))) {
mSuggestions.add(item);
}
} catch (Exception ex) {
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = mSuggestions;
filterResults.count = mSuggestions.size();
return filterResults;
} else {
return new FilterResults();
}
}
在这里,mItemsAll保存给适配器的mainList的副本
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
@SuppressWarnings("unchecked")
ArrayList<Item> filteredList = (ArrayList<Item>) results.values;
if (results != null && results.count > 0) {
clear();
for (Item c : filteredList) {
add(c);
}
notifyDataSetChanged();
}
}
};
我在这一行得到了并发修改例外:
for (Item c : filteredList)
所以我删除了这一行:
ArrayList filteredList=ArrayList results.values;
&添加了这些行
ArrayList<Item> filteredList = new ArrayList<Item>();
filteredList.addAll((Collection<? extends Item>) results.values);
但是现在我在getview方法中得到了Null指针异常。但是根据我的代码,只有在过滤结果有一些值时,它才应该转到getview。那为什么我会得到这个例外
提前感谢。什么是结果。价值观?clear做什么。addItem做什么?事实上,如果可以添加所涉及的整个代码结构,那会有所帮助。你能发布过滤方法吗?我猜您正在修补其中的原始适配器项。如果是这种情况,那么您要向其中添加项的集合实际上是FilterResults,这当然会导致该异常@Knossos这可能是的一个子类。这里已经回答过了:虽然这个问题的概念很常见,但这个问题的确切原因在你的链接中没有得到回答。
ArrayList<Item> filteredList = new ArrayList<Item>();
filteredList.addAll((Collection<? extends Item>) results.values);