我想从我的活动中当前用户记录的配置文件中检索名称。每当用户登录时,用户都应该从Firebase看到"你好(用户名("。下面提供了我的登录活动代码。现在我想要的是每当我单击登录按钮时都会出现新的活动,即我的欢迎页面,它应该显示当前登录的用户名
editTextEmail = (EditText) findViewById(R.id.editTextEmail);
editTextPassword = (EditText) findViewById(R.id.editTextPassword);
buttonSignIn = (Button) findViewById(R.id.buttonSignin);
textViewSignup = (TextView) findViewById(R.id.textViewSignUp);
progressDialog = new ProgressDialog(this);
buttonSignIn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
userLogin();
}
});
textViewSignup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent a = new Intent(Login.this,MainActivity.class);
startActivity(a);
}
});
}
private void userLogin(){
String email = editTextEmail.getText().toString().trim();
String password = editTextPassword.getText().toString().trim();
if(TextUtils.isEmpty(email)){
Toast.makeText(this,"Please enter email",Toast.LENGTH_LONG).show();
return;
}
if(TextUtils.isEmpty(password)){
Toast.makeText(this,"Please enter password",Toast.LENGTH_LONG).show();
return;
}
progressDialog.setMessage("Please wait...");
progressDialog.show();
fb.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
progressDialog.dismiss();
if(task.isSuccessful()){
finish();
startActivity(new Intent(getApplicationContext(), Welcome.class));
}
}
});
}
}
您可以通过简单地获取用户,然后引用存储在数据库中的名称来执行此操作
首先获取用户
myUser = mAuth.getCurrentUser().getUid();
然后只是得到名字
mDatabase.child("users").getChild(myUser).getchild("Username").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot datasnapshot) {
String userName = datasnapshot.getValue(String.class);
//you can log your UserName to see that you actually have it
Log.e("hello ",""+userName);
}
}
你的mDatabase在哪里(在你的onCreate中(
mDatabase = FirebaseDatabase.getInstance().getReference();
此外,如果您还没有结构化数据库,则可以直接从mAuth获取用户的显示名称,如下所示
myUser = mAuth.getCurrentUser().getDisplayName();
也适用于电子邮件
myUser = mAuth.getCurrentUser().getEmail();
请记住,mAuth 应该在您的 onCreate 中声明,如下所示
mAuth = FirebaseAuth.getInstance();
PS:我只是假设您的数据库是按该顺序排列的,您的用户名在树中 用户/用户ID/用户名
快乐编码
使用意图上的putExtra
方法将名称传递给第二个活动
fb.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>()
{
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
progressDialog.dismiss();
if(task.isSuccessful()){
String displayName = FirebaseAuth.getInstance().getCurrentUser().getDisplayName();
Intent intent = new Intent(getApplicationContext() , Welcome.class);
intent.putExtra("DISPLAY_NAME" , displayName);
startActivity(intent);
finish();
}
}
});
在您的Welcome
活动中获取从意图中提取值
@Override
public void onCreate(Bundle savedInstanceState){
Intent intent = getIntent();
String displayName = intent.getStringExtra("DISPLAY_NAME");
displayName = displayName == null ? "UNKOWN" : displayName;
System.out.println(displayName);
Toast.makeText(this , displayName , Toast.LENGTH_LONG).show();
}
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String uid = user.getUid();
String name = user.getDisplayName();
您可以使用上面的代码行来打印登录的用户名。