首页 > 解决方案 > 带有 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)”

有没有办法解决这个问题,或者有没有更好的方法从节点中获取该值并在其他地方使用它?

标签: javaandroidfirebasefirebase-realtime-database

解决方案


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

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


推荐阅读