Java 从firebase数据库获取数据
我想从Firebase内部获取数据,以检查数据库中是否存在此用户,但有一个问题我无法解决,listener trigger late这是我的代码:-Java 从firebase数据库获取数据,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我想从Firebase内部获取数据,以检查数据库中是否存在此用户,但有一个问题我无法解决,listener trigger late这是我的代码:- 如果移除while循环,则无法快速获取对象 若我保持循环,而我进入无限循环,我不知道为什么 为什么不触发 DataSnapshot fetched ; public boolean user_exist(final String user) throws Exception { users.addListenerForSingleValueEve
- 如果移除while循环,则无法快速获取对象
- 若我保持循环,而我进入无限循环,我不知道为什么
为什么不触发
DataSnapshot fetched ; public boolean user_exist(final String user) throws Exception { users.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { fetched = dataSnapshot ; } @Override public void onCancelled(DatabaseError databaseError) { } }); while (fetched == null){ Log.e("dbController","not fetched yet"); } return fetched.hasChild(user); }
users.child(user).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
funUserExists();
} else {
funNoUser();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Firebase必须从数据库获取数据并将其带到应用程序中。这可能需要时间,因此应该在后台进行。添加valueEventListener时,将在后台完成抓取。您可以显示progressBar以显示数据仍在加载,一旦数据在手中,请执行代码的其余部分:
users.child(user).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
funUserExists();
} else {
funNoUser();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
您没有显示如何触发事件。while循环是否有可能阻塞线程?您需要从另一个线程触发事件。不要使用100%运行的时间。您的侦听器可以改为添加到队列中,并且您可以在向队列中添加项目时进行日志记录。数据是从Firebase异步加载的。不能从(常规、同步)函数返回它。看到了么,您建议让主线程等待足够长的时间,以便侦听器触发?我已经尝试过这个解决方案,但是第一次调用函数fetched是null第二次它不是null Frank van Puffelen是的,我想这是我的问题,谢谢你没有显示你是如何触发事件的。while循环是否有可能阻塞线程?您需要从另一个线程触发事件。不要使用100%运行的时间。您的侦听器可以改为添加到队列中,并且您可以在向队列中添加项目时进行日志记录。数据是从Firebase异步加载的。不能从(常规、同步)函数返回它。看到了么,您建议让主线程等待足够长的时间,以便侦听器触发?我已经尝试过这个解决方案,但第一次调用函数fetched是null第二次它不是null Frank van Puffelen是的,我想这是我的问题,谢谢