android– 如何使用Firebase查询返回布尔值?

android– 如何使用Firebase查询返回布尔值?,第1张

概述我正在尝试创建一个名为sendRegisterUserMessage()的方法,如果数据库中尚不存在用户,则该方法将User对象发送到Firebase数据库.由于某种原因,尽管使用侦听器在数据库中找到了对象,但该方法始终返回false.无论如何,我在onCreate()的MainActiviy中调用此方法:MessageSenderHandler.

我正在尝试创建一个名为sendRegisterUserMessage()的方法,如果数据库中尚不存在用户,则该方法将User对象发送到Firebase数据库.由于某种原因,尽管使用侦听器在数据库中找到了对象,但该方法始终返回false.

无论如何,我在onCreate()的MainActiviy中调用此方法:

MessageSenderHandler.getInstance().sendRegisterUserMessage();

在我的MessageSenderHandler类中:

//Checks if user is Registered- if not it sends a RegisterUser messagepublic voID sendRegisterUserMessage() {    System.out.println("registered: " +DatabaseManager.getInstance().isCurrentUserRegistered()); //This prints false no matter what    if (DatabaseManager.getInstance().isCurrentUserRegistered() == false) {        FirebaseDatabase.getInstance().getReference().child(MessageTypes.REGISTER_USER_MESSAGE).child(                CurrentUser.getInstance().getUserID())                .setValue(                        new RegisterUserMessage()                );    }}

然后这是我的DatabaseManager类中的isCurrentUserRegistered()方法

public boolean isCurrentUserRegistered() {    query query = databaseReference.child("/" + MessageTypes.REGISTER_USER_MESSAGE + "/" + CurrentUser.getInstance().getUserID());    query.addValueEventListener(isUserRegisteredDataListener);    System.out.println("REGISTERED:" + isUserRegisteredDataListener.isUserRegisterd()); //This also prints false no matter what    return isUserRegisteredDataListener.isUserRegisterd();}

这是我的IsUerRegisteredDataListener

public class IsUserRegisteredDataListener implements ValueEventListener {static boolean exists;private static IsUserRegisteredDataListener isUserRegisteredDataListener;public IsUserRegisteredDataListener() {    isUserRegisteredDataListener = this;}public static IsUserRegisteredDataListener getInstance() {    if (isUserRegisteredDataListener == null) {        isUserRegisteredDataListener = new IsUserRegisteredDataListener();    }    return isUserRegisteredDataListener;}@OverrIDepublic voID onDataChange(DataSnapshot dataSnapshot) {        this.exists = dataSnapshot.exists();         System.out.println("EXISTS" + exists)); //This prints true}@OverrIDepublic voID onCancelled(DatabaseError databaseError) {}public boolean isUserRegisterd() {    return exists;}

}

我不明白为什么前两个方法打印FALSE但具有实际数据监听器的方法在侦听器中打印TRUE

解决方法:

public boolean isCurrentUserRegistered() {    query query = databaseReference.child("/" + MessageTypes.REGISTER_USER_MESSAGE + "/" + CurrentUser.getInstance().getUserID());    query.addValueEventListener(isUserRegisteredDataListener);    System.out.println("REGISTERED:" + isUserRegisteredDataListener.isUserRegisterd()); //This also prints false no matter what    return isUserRegisteredDataListener.isUserRegisterd();}

在此方法中,您必须等待firebase结果才能获得isUserRegistered.因此,您的IsUserRegisteredDataListener类无法按您的意愿工作.

你能说明你初始化isUserRegisteredDataListener字段的位置吗?

总结

以上是内存溢出为你收集整理的android – 如何使用Firebase查询返回布尔值?全部内容,希望文章能够帮你解决android – 如何使用Firebase查询返回布尔值?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1118365.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存