我是firebase的新手..
我正在尝试分配有关用户在我的应用中注册的更多信息,因为名称,密码,电子邮件,图片对每个用户来说都不够。所以我决定使用UID作为每个用户的密钥并将其存储在数据库中,然后我可以稍后抓取。 因此,如果用户登录任何其他时间我想要检索此数据这些数据不会再次更改所以setvalue()并添加更改的监听器不会与我一起工作所以为了这样做我编码
Query q = FirebaseDatabase.getInstance().getReference().child("users").equalTo(FirebaseAuth.getInstance().getCurrentUser().getUid());
接下来我该怎么做?!
指南没有说明有关equalto()的任何信息,如何使用查询或如何在没有监听器的情况下检索数据
感谢
答案 0 :(得分:3)
Firebase检索查询是异步的,没有“官方”方式同步(没有回调/监听器)。
为什么它是异步的?
由于Firebase是基于云的,因此需要进行网络调用才能执行任何CRUD操作。
现在您已拥有Query
个对象,只需附加ValueEventListener
并在DataSnapShot
中接收您的数据。
注意:addListenerForSingleValueEvent(listener)
仅查询一次,与addValueEventListener(listener)
相对。
它看起来像这样:
q.addValueEventListener(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// for example: if you're expecting your user's data as an object of the "User" class.
User user = dataSnapshot.getValue(User.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
// read query is cancelled.
}
});
有关详细信息,请参阅此Link
编辑:事件监听器最初被触发一次,然后在您查询的数据发生变化时触发。
答案 1 :(得分:3)
你可以使用:
DatabaseReference usersRef = FirebaseDatabase.getInstance().getReference().child("users")
Query q= usersRef.orderByKey().equalTo(FirebaseAuth.getInstance().getCurrentUser().getUid());
然后在您的查询中附加一个侦听器以获取数据。
q.addValueEventListener(new ValueEventListener()){ }
否则,您可以通过以下方式构建数据:
users:
|-uid1 :
|-uid2 :
|-uid3 :
通过这种方式,您只需使用此代码来检索用户的DatabaseReference:
String uid= FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference userRef = FirebaseDatabase.getInstance().getReference().child("users").child(uid);
答案 2 :(得分:0)
每一个我发现Firebase事件侦听器都需要一些时间来执行其任务,因此我只使用了标志和一些线程概念来实现与Firebase数据检索的最佳兼容性
v[1]