【发布时间】:2020-10-28 20:22:52
【问题描述】:
我的 getFilter() 有问题,当我在 Activity 上填充 RecyclerView 时一切正常,但是当我开始在 SearchView 上输入时出现此错误:
java.lang.NullPointerException:尝试调用虚拟方法 'package.Classes.Farm.getFarms()' 在空对象引用上
为什么当我填充我的 RecyclerView 不为空(Farm.class)之前,当我开始输入搜索时,为空?
在活动中,我在回调响应和填充 RecyclerView 之后启动我的 setOnQueryTextListener。我用同样的代码几个月了,从来没有遇到过问题,现在他们改变了响应回调并且发生了这个错误(之前(响应示例):https://jsonplaceholder.typicode.com/posts,getFilter() 就像一个魅力一样工作)。
(如果您需要更多代码和详细信息,请告诉我,我会编辑我的问题。我的英语生疏了)
响应 OkHttp:
{
"farms": [
{
"id": "000000000-0000-0000-0000-000000000000",
"name": "Areado"
}
]
}
生成的第一个类:
public class Farm {
@SerializedName("farms")
@Expose
private List<Farm_> farms = null;
public List<Farm_> getFarms() {
return farms;
}
public void setFarms(List<Farm_> farms) {
this.farms = farms;
}
}
生成的第二个类:
public class Farm_ {
@SerializedName("id")
@Expose
private String id;
@SerializedName("name")
@Expose
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
来自适配器的 getFilter() 方法(farmListFiltred 和 farmList 来自 Farm.class 类型):
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String charString = charSequence.toString();
if (charString.isEmpty()) {
farmListFiltred = farmList;
} else {
Farm filteredList;
filteredList = new Farm();
for (Farm_ row : farmList.getFarms()) {
if (row.getName().toLowerCase().contains(charString.toLowerCase())) {
filteredList.getFarms().add(row);
}
}
farmListFiltred = filteredList;
}
FilterResults filterResults = new FilterResults();
filterResults.values = farmListFiltred;
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
farmListFiltred = (Farm) filterResults.values;
notifyDataSetChanged();
}
};
}
【问题讨论】:
标签: android android-recyclerview android-filterable