如何从onDataChange方法中获取值?

时间:2017-05-15 00:51:31

标签: android firebase firebase-realtime-database

我想将登录到我的应用的用户电子邮件与来自我的firebase数据库的已注册用户的电子邮件进行比较。

  

如何获取emailFromDatabase值之外的值   onDataChange方法,以便我可以将数据库的电子邮件值与我登录用户的电子邮件进行比较?

usersListDatabaseReference.addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot emailSnapshot: dataSnapshot.getChildren()) {
      String emailFromDatabase = (String) emailSnapshot.getValue();
    }
  }
  @Override
  public void onCancelled(DatabaseError databaseError) {}
});

这是我的Firebase控制台中的数据库结构。

amapp-731b2addclose
   + messages
   + version
   - userslist
      - email
         |
         | -- 0: "abc@gmail.com"
         | -- 1: "xyz@gmail.com"
         | -- 2: "ghi@gmail.com"
         | -- 3: "mno@gmail.com"

1 个答案:

答案 0 :(得分:3)

您无法从回调中获取价值。嗯......从技术上讲,你可以把它拿出来,但你不知道什么时候发生。

相反,您应该将执行比较的代码移动到 onDataChange()回调中。 E.g。

final String emailFromUser = "pc@somedomain.com";
usersListDatabaseReference.addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot emailSnapshot: dataSnapshot.getChildren()) {
      String emailFromDatabase = emailSnapshot.getValue(String.class);
      if (emailFromDatabase.equals(emailFromUser)) {
        System.out.println("Found a matching email");
      }
    }
  }
  @Override
  public void onCancelled(DatabaseError databaseError) {
    throw databaseError.toException(); // don't ignore errors
  }
});

为了使代码更具可重用性,您可以创建自定义回调界面。有关详情,请参阅getContactsFromFirebase() method return an empty list