我有一个RecyclerView,该适配器将适配器列表存储在Firebase中,并且我试图从该数据库中获取特定节点,但是遇到一些问题。
这是我现在要在节点上获取特定值的内容:
public double getWager(int position) {
FCGames.child(openGames.get(position)).child("wager").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
wagerr = (double) dataSnapshot.getValue();
String wagerD = Double.toString(wagerr);
wage = wagerD.endsWith("0");
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
return wagerr;
}
现在,从我记得的情况来看,return语句在Firebase上不能很好地工作,但是我不明白为什么这不起作用。我在类的顶部定义了“ wagerr”,并在获取所需的值后返回该值。
然后在我的RecyclerView中,我试图将此double设置为setText,以便可以在屏幕上绘制它,但这就是我的问题所在。
这是我在getWager方法上调用的内容:
holder.wager.setText(String.format(""+ fcl.getWager(position)));
但是当我尝试使其全部正常工作时会出现此错误:
尝试在空对象引用上调用虚拟方法'double com.example.brent.hidden-app.GameLobby.getWager(int)'
是否有解决此问题的方法,还是有更好的方法从节点中获取该值并在其他地方使用它?
答案 0 :(得分:0)
由于此调用是异步的,因此建议您在适配器中添加一个列表(建议使用ArrayList),并根据用途在onChildAdded或onDataChange上填充该列表。
然后在getWager()中,从该数组列表中获取Wager。 (例如:return list.get(position);)