簡體   English   中英

getFilter() 的問題:java.lang.NullPointerException

[英]Problems with getFilter(): java.lang.NullPointerException

我的 getFilter() 有問題,當我在 Activity 上填充 RecyclerView 時,一切正常,但是當我開始在 SearchView 上輸入時,會發生此錯誤:

java.lang.NullPointerException:嘗試在 null ZA8CFDE6331BD59EB2AC96F8911C4B666 上調用虛擬方法“package.Classes.Farm.getFarms()”

為什么當我填充我的 RecyclerView 不是 null (Farm.class) 和之前,當我開始輸入搜索時,是 null?

在活動中,我在回調響應和填充 RecyclerView 之后啟動我的 setOnQueryTextListener。 我使用相同的代碼幾個月並且從未遇到過問題,現在他們更改了響應回調並且發生了此錯誤(之前(響應示例): https://jsonplaceholder.typicode.com/posts ,並且 getFilter() 就像魅力)。

(如果您需要更多代碼和詳細信息,請告訴我,我會編輯我的問題。我的英語生疏了)

響應 OkHttp:

{
  "farms": [
    {
      "id": "000000000-0000-0000-0000-000000000000",
      "name": "Areado"
    }
  ]
}

第一個 class 生成:

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

}

第 2 個 class 生成:

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

在您的農場 class 中,農場成員變量最初設置為 null。 只有當 Farm class 的設置器被調用時,它才獲得一個值,而不是通過構造函數。 因此調用filteredList.getFarms(),預計會產生一個nullPointer 異常。 我建議只做類似的事情

private List<Farm_> farms = new List<Farm_>();

在你的農場 class。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM