java - 列表上的空对象引用

标签 java android android-recyclerview nullpointerexception

我有一个列表正在被两个不同的类使用。然而,我需要在我的 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/

相关文章:

java - 字符串输入到二进制输出 Java

java - Android 多点触控 - 不规则手指跟踪

android - RecyclerView拦截滚动并停止滚动到特定位置

java - 如何按照 API 调用完成的顺序在 RecyclerView 中加载项目?

android - SwipeRefreshLayout 内的 RecyclerView,左/右滑动可更改 View

java - 如何使用阴影依赖项运行单元测试?

java - 谁能给我一份无效的 XML 字符列表

android - gethitRect() ,我做错了,这是如何工作的?

Android Firebase 通知提供默认图标

java - RecyclerView 与 CardView : Nothing showing up