具有Firebase引用的返回语句

时间:2018-11-05 04:19:48

标签: java android firebase firebase-realtime-database

我有一个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)'

是否有解决此问题的方法,还是有更好的方法从节点中获取该值并在其他地方使用它?

1 个答案:

答案 0 :(得分:0)

由于此调用是异步的,因此建议您在适配器中添加一个列表(建议使用ArrayList),并根据用途在onChildAdded或onDataChange上填充该列表。

然后在getWager()中,从该数组列表中获取Wager。 (例如:return list.get(position);)