【问题标题】:Firebase return value from datasnapshot来自数据快照的 Firebase 返回值
【发布时间】:2017-05-07 11:21:06
【问题描述】:

在我的应用程序中,我需要从数据库中的一个节点检索一个值,并使用该值传递给我代码中其他地方的另一个方法。

是否可以从 firebase 中的数据快照中读取数据并返回此值以在数据快照之外使用?

例如,要从以下方法返回 phoneNum 或 groupId 变量以用于另一个方法:

public void getUserPhoneNum(String uId){

    usersDatabase.child(uId).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists() || dataSnapshot.getValue() != null) {
                User mUser = dataSnapshot.getValue(User.class);
                String userPhone = mUser.getPhoneNum();

                Group mGroup = dataSnapshot.child("groups").getValue(Group.class);
                String groupId = mGroup.getGroupId();

                groupsDatabase.child(groupId).child("members").child(userPhone).child("playing").setValue()
                if (userPhone != null) {
                }
            }
            else {

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    发生这种情况是因为 onDataChange 被称为 asynchronously。这意味着获得phoneNum 的语句在调用onDataChange 之前执行。如果你想在外面使用它,它将为空。所以为了使用phoneNum,你需要在onDataChange()方法中使用它,或者访问这个post和这个post

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      这是不可能的,因为当您使用addListenerForSingleValueEvent 时,您正在定义一个实现“onDataChangeandonCancelled”的类。

      您现在可以使用一个界面让班级知道电话号码何时被提取。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-03
        • 1970-01-01
        • 1970-01-01
        • 2020-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多