[英]Null Object Reference on List
我有兩個單獨的類正在使用的列表。 但是,我需要在我的onDataChange方法之一中定義此列表,這給了我一些問題。 在班級頂部,我的清單定義為:
public List<String> openGames;
我在那里,所以我的RecyclerView類可以使用它。 然后,我像這樣在onDataChange方法中初始化我的列表
public void updateUI(final ListCallback callBack) {
FCGames.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
numGames = (int) dataSnapshot.getChildrenCount();
openGames = new ArrayList<>();
.
.
.
這些點只是說有更多的代碼,但是我認為這個問題不是必需的。
在MyRecyclerViewer類中,正在使用此列表,當“活動”打開時,它將嘗試獲取列表的大小,如下所示:
@Override
public int getItemCount() {
return mData.size();
}
但是,由於直到我的應用程序中發生某些事情(例如,調用onDataChange方法)之后才定義列表,所以拋出了一個錯誤:
嘗試在空對象引用上調用接口方法'int java.util.List.size()'
我知道這是因為在獲取列表大小之前未定義列表。
因此,為了解決這個問題,我要做的是在獲取列表大小時添加了一個空列表大小檢查,這確實消除了錯誤,但是這使我的整個RecyclerViewer都無法正常工作
有什么解決辦法嗎?
您應該執行public List<String> openGames = new ArrayList<>();
現場初始化。
並在Firebase調用之外設置RecyclerView適配器。
在Firebase回調中,請勿創建新列表。 而是在添加新數據之前使用openGames.clear()
將其清空,這將保留RecyclerView使用的列表實例。
這樣,您仍然必須調用適配器的notify方法,以使UI知道數據已更改,如果RecyclerView“不起作用”,我就認為您丟失了它
如果您想接收Firebase中發生的數據更改,則使用了錯誤的方法
...
addListenerForSingleValueEvent()
方法... 觸發一次,然后不再觸發。
您需要使用addValueEventListener
您必須驗證您的List是否不為null才能獲取列表的大小。
@Override
public int getItemCount() {
return mData != null ? mData.size() : 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.