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