java - 带有 Firebase 引用的返回语句
问题描述
我有一个 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)”
有没有办法解决这个问题,或者有没有更好的方法从节点中获取该值并在其他地方使用它?
解决方案
由于此调用是异步的,我建议在适配器中添加一个列表(我建议使用 ArrayList),并根据使用情况在 onChildAdded 或 onDataChange 上填充该列表。
然后在 getWager() 中,您从该数组列表中获取 Wager。(例如:返回 list.get(position);)
推荐阅读
- java - 密码的 doFinal() 不写入字节
- eclipse - Eclipse (2018-09) 带有 Cygwin 的 CDT 项目,无法调试二进制文件
- javascript - 以数组为参数的 Java 和 Javascript 绑定函数
- vue.js - Framework7 切换组件不是反应式的
- javascript - 如何在没有 toJS 的情况下从 immutable.js 有序映射中获取所有有序值?
- java - 将 xml bean 自动装配到 @Configuration 类中
- python - 如何使用 Panda 中的第一列来保存结果
- c# - 从 MySQL 到 DataGridView 的 C# 实时数据流
- c# - 通配符 ##any 错误 xml 架构验证
- php - 多列关联时如何定义Laravel关系