Java Firebase从电子邮件获取uid
我想从输入电子邮件中获取uid,以便可以通过电子邮件添加朋友 以下是我到目前为止得到的信息:Java Firebase从电子邮件获取uid,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我想从输入电子邮件中获取uid,以便可以通过电子邮件添加朋友 以下是我到目前为止得到的信息: final DatabaseReference mRef = FirebaseDatabase.getInstance().getReference().child("users"); FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); if (user != null) { final Str
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) {
}
});
}
final DatabaseReference mRef=FirebaseDatabase.getInstance().getReference().child(“用户”);
FirebaseUser=FirebaseAuth.getInstance().getCurrentUser();
如果(用户!=null){
最后一个字符串currentUserUid=user.getUid();
mRef.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
if(dataSnapshot.hasChild(uid)){
DatabaseReference newRef=mRef.child(uid);
newRef.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
如果(!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=新朋友(uid、用户名、电子邮件、firebaseToken);
database.child(Constants.ARG_用户)
.child(currentUserUid)
.child(Constants.ARG_-FRIENDS)
.child(uid)
.setValue(朋友)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
mOnFriendDatabaseListener.onSuccess(context.getString(R.string.friend_已成功添加));
}否则{
mOnFriendDatabaseListener.onFailure(context.getString(R.string.friend\u无法添加));
}
}
});
}否则{
Log.d(“添加朋友”,“用户已不存在”);
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}否则{
Log.d(“添加朋友”,“用户不存在”);
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
如果我直接输入uid,但我希望我的输入是电子邮件并从中获取uid,或者如果有其他解决方案,请建议
以下是数据库结构的外观:
提前感谢您的帮助。要通过用户的电子邮件地址搜索用户,您需要订购/筛选该属性:
Query query = mRef.orderByChild("email").equalTo("example@example.com");
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