2017-05-15 8 views
0

私は自分のアプリにサインインしたユーザーの電子メールと、すでに登録されているユーザーの電子メールをfirebaseデータベースから比較したいと思っていました。どのようにしてonDataChangeメソッドの値を取得できますか?

どのように私は、ユーザーの電子メールに署名した私に、データベースの電子メールの値を比較することができるように、私は onDataChange方法外emailFromDatabase値の値を得ることができますか?

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: "[email protected]" 
     | -- 1: "[email protected]" 
     | -- 2: "[email protected]" 
     | -- 3: "[email protected]" 
+0

また、コールバックインターフェイスを実装することもできます。 –

答えて

3

コールバックから値を取得することはできません。まあ...技術的にはそれを出すことができますが、いつ起こるかは分かりません。

代わりに、のコードをonDataChange()コールバックに移動します。例えば。

final String emailFromUser = "[email protected]"; 
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 
    } 
}); 
関連する問題