如何从dataSnapshot获取价值?
当我调试此代码时,在databaseUser中dataSnapshot具有来自User in database的值,但是在对象user1
中没有添加,它全部为null。 我不明白,因为在对象事件中正常接收值。
databaseEvent.child(getKeyEvent()).addListenerForSingleValueEvent( new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { final Event event = dataSnapshot.getValue(Event.class); user = FirebaseAuth.getInstance().getCurrentUser(); if(user != null) { databaseUser.orderByChild("userEmail").equalTo(user.getEmail()).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if (dataSnapshot.exists()) { //User already exists User user1 = dataSnapshot.getValue(User.class); } } });
我的数据库用户,仅供测试:
public class User { String userId; String userEmail; Boolean userHasInterest; String eventId; public String getUserId() { return userId; } public String getUserEmail() { return userEmail; } public Boolean getUserHasInterest() { return userHasInterest; } public String getEventId() { return eventId; } public User(String userId, String eventId, String userEmail, Boolean userHasInterest) { this.userId = userId; this.userEmail = userEmail; this.userHasInterest = userHasInterest; this.eventId = eventId; }
而方法,只是为了选择另一个活动的事件的关键:
public String getKeyEvent(){ Intent intent = getIntent(); Bundle bundle = intent.getExtras(); String key = bundle.getString("Evento"); return key; }
对Firebase数据库执行查询时,可能会有多个结果。 通过附加ValueListener
您可以在一个快照中获得这些结果,因此快照包含这些结果的列表。 即使只有一个结果,快照也会包含一个结果的列表。
您的代码未能将此“结果列表”考虑在内。 通过循环DataSnapshot.getChildren()
很容易解决:
databaseUser.orderByChild("userEmail").equalTo(user.getEmail()).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) { User user1 = userSnapshot.getValue(User.class);
我曾经遇到过这个问题,解决方案非常棒。
您应该在User
类中添加setter。
试试吧,你不会后悔的。
- 如何在java中编写firebase云函数
- Android – Firebase – 将用户发送到聊天室
- 使用GWT时找不到Firebase服务工作者(404错误)
- 在Custom Object Firebase Android中获取参考和密钥
- removeEventListener不删除firebase中的侦听器
- 如何将Firebase RecyclerView放在另一个RecyclerView中
- 如何使用Android对Firestore进行分页?
- 如何使用Firebase Google Maps API Android中的数据更新标记位置
- Firestore – 为什么检查DocumentSnapshot是否为空并且调用是否存在?