我有两个单独的类正在使用的列表。但是,我需要在我的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根本无法工作
对此有任何解决方法吗?
答案 0 :(得分:1)
您应该在字段中进行public List<String> openGames = new ArrayList<>();
初始化。
并在Firebase调用之外设置RecyclerView适配器。
在Firebase回调中,请勿创建新列表。最好在添加新数据之前使用openGames.clear()
将其清空,这将保留RecyclerView使用的列表实例。
那样,您仍然必须调用适配器的notify方法,以使UI知道数据已更改,这就是我假设如果RecyclerView“不起作用”的话您将丢失的信息
如果您想接收Firebase中发生的数据更改,则使用了错误的方法
...
addListenerForSingleValueEvent()
方法... 触发一次,然后不再触发。
您需要使用addValueEventListener
答案 1 :(得分:0)
您必须验证列表是否不为null才能获取列表的大小。
@Override
public int getItemCount() {
return mData != null ? mData.size() : 0;
}