簡體   English   中英

空對象引用列表

[英]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.

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