【问题标题】:onDataChange calling abruptonDataChange 调用突然
【发布时间】:2017-04-23 23:33:45
【问题描述】:
private boolean authenticateUser(final String role, final String userId) {
    DatabaseReference roleReference = FirebaseDatabase.getInstance().getReference().child("role").child(role);
    roleReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            HashMap<String, String> map = (HashMap<String, String>) dataSnapshot.getValue();
            if (map != null) {
                Set<String> userIds = map.keySet();
                if (userIds.contains(userId))
                    authenticationResult = true;
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    return authenticationResult;
}

以上是验证用户的功能。我想返回 true if (userIds.contains(userId)) 否则为 false。但是 authenticateUser 总是返回 false。

【问题讨论】:

标签: android firebase firebase-realtime-database


【解决方案1】:

如果您确定代码没有错误,我想提醒您 Firebase 连接是异步。也就是说,您不能使用异步方法返回值,因为返回语句将在您有足够的时间更改该布尔值之前执行。

尝试更改方法,使其返回 void,并在 onDataChange 内部使用一种带有值的响应方法。

例子:

private void authenticateUser(final String role, final String userId) {
DatabaseReference roleReference = FirebaseDatabase.getInstance().getReference().child("role").child(role);
roleReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        HashMap<String, String> map = (HashMap<String, String>) dataSnapshot.getValue();
        if (map != null) {
            Set<String> userIds = map.keySet();
            if (userIds.contains(userId))
                authenticationResult = true;
        }
        authenticateUserResponse(authenticationResult);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

这将是正确执行此操作的唯一方法,因为异步方法并不意味着在工作完成之前返回值。

【讨论】:

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