2017-06-17 16 views
0

電子メールで友人を追加できるようにするための電子メールを入力したいのですが、ここでFirebaseが電子メールからuidを取得する

は、私がこれまでに得ているものです:

final DatabaseReference mRef = FirebaseDatabase.getInstance().getReference().child("users"); 
    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
    if (user != null) { 
     final String currentUserUid = user.getUid(); 

     mRef.addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       if (dataSnapshot.hasChild(uid)) { 
       DatabaseReference newRef = mRef.child(uid); 
       newRef.addListenerForSingleValueEvent(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         if (!dataSnapshot.hasChild(uid)) { 
          DatabaseReference database = FirebaseDatabase.getInstance().getReference(); 
          String username = String.valueOf(dataSnapshot.child("username").getValue()); 
          String email = String.valueOf(dataSnapshot.child("email").getValue()); 
          String firebaseToken = String.valueOf(dataSnapshot.child("firebaseToken").getValue()); 

          Friend friend = new Friend(uid, username, email, firebaseToken); 
          database.child(Constants.ARG_USERS) 
            .child(currentUserUid) 
            .child(Constants.ARG_FRIENDS) 
            .child(uid) 
            .setValue(friend) 
            .addOnCompleteListener(new OnCompleteListener<Void>() { 
             @Override 
             public void onComplete(@NonNull Task<Void> task) { 
              if (task.isSuccessful()) { 
               mOnFriendDatabaseListener.onSuccess(context.getString(R.string.friend_successfully_added)); 
              } else { 
               mOnFriendDatabaseListener.onFailure(context.getString(R.string.friend_unable_to_add)); 
              } 
             } 
            }); 
         } else { 
          Log.d("Adding Friend", "User already not exist"); 
         } 
        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }); 
       } else { 
        Log.d("Adding Friend", "User does not exist"); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 
    } 

私が直接入力UIDをしかし、私は私の入力は、電子メールも持っており、それからUIDを取得したいと思い、あるいはもしそこにあれば、この作品他の解決策を提案してください。事前に助けを Image of firebase db

ありがとう:データベース構造がどのように見えるか

です。

答えて

0

あなたがそのプロパティに/フィルタを注文する必要が自分のメールアドレスでユーザーを検索するには:

Query query = mRef.orderByChild("email").equalTo("[email protected]"); 
query.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     // There may be multiple users with the email address, so we need to loop over the matches 
     for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) { 
      System.out.println(userSnapshot.getKey()); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     // Getting Post failed, log a message 
     Log.w(TAG, "find email address:onCancelled", databaseError.toException()); 
     // ... 
    } 
}); 

ない質問への直接の関連はなく、友人やプロファイルのネストを削除するために、あなたのデータを再構築してください。多くの理由から、Firebaseのデータ構造をフラットに保ち、ユーザープロファイルをフレンドリストから分離することが最善です。

/users 
    uid1: ... profile for user 1 
    uid2: ... profile for user 2 
/friends 
    uid1: ... friends list for user 1 
    uid2: ... friends list for user 2 
関連する問題