我正在尝试创建一个名为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查询返回布尔值?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)