每当用户登录时,用户都应该看到来自Firebase的"Hello (name of user)"



我想从我的活动中当前用户记录的配置文件中检索名称。每当用户登录时,用户都应该从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();

您可以使用上面的代码行来打印登录的用户名。

相关内容

最新更新