gpt4 book ai didi

java - 列表上的空对象引用

转载 作者:行者123 更新时间:2023-12-02 10:38:05 27 4
gpt4 key购买 nike

我有一个列表正在被两个不同的类使用。然而,我需要在我的 onDataChange 方法之一中定义此列表,这给我带来了一些问题。在我的类(class)顶部,我的列表定义如下:

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 类中,正在使用此列表,当 Activity 打开时,它会尝试获取列表的大小,如下所示:

@Override
public int getItemCount() {
return mData.size();
}

但是,由于直到我的应用程序中发生某些事情(例如调用 onDataChange 方法)时才定义列表,因此这会引发错误:

Attempt to invoke interface method 'int java.util.List.size()' on a null object reference

我知道这是因为在获取列表大小之前没有定义列表。

因此,我尝试解决此问题的方法是在获取列表大小时添加空列表大小检查,这确实消除了错误,但它使我的整个 RecyclerViewer 根本无法运行

有解决办法吗?

最佳答案

你应该这样做public List<String> openGames = new ArrayList<>();现场初始化。

并在 Firebase 调用之外设置 RecyclerView 适配器。

在 Firebase 回调中,不要创建新列表。而是使用openGames.clear()在添加新数据之前清空它,这将保留 RecyclerView 正在使用的列表实例。

这样,您仍然必须调用适配器的通知方法,让 UI 知道数据已更改,这就是我假设如果 RecyclerView“不起作用”您会丢失的内容

<小时/>

如果您想接收 Firebase 中发生的数据更改,那么您使用了错误的方法

... the addListenerForSingleValueEvent() method ... triggers once and then does not trigger again.

您需要使用addValueEventListener

关于java - 列表上的空对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53128451/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com