我已经在Android Studio(Kotlin)中创建了一个注册用户的应用程序:
已创建电子邮件/密码用户(身份验证)以及相应的数据库记录(实时数据库):
我正在执行登录过程,并且能够在MainActivity,BUT上显示已登录用户的电子邮件地址,但我不知道如何显示用户名和喜欢的颜色(来自数据库)。
有人可以帮忙吗?
提前感谢您的时间。
RegisterActivity.kt
class RegisterActivity : AppCompatActivity() {
private lateinit var mAuth : FirebaseAuth
private lateinit var viewModel: UserViewModel
public val USER: String = "user"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_register)
mAuth = FirebaseAuth.getInstance()
viewModel = ViewModelProvider(this).get(UserViewModel::class.java)
register_button.setOnClickListener {
val email = register_email.text.toString().trim()
val password = register_password.text.toString().trim()
val name = register_name.text.toString().trim()
val colour = register_colour.text.toString().trim()
mAuth.createUserWithEmailAndPassword(email, password)
val user = User()
user.email = email
user.name = name
user.colour = colour
viewModel.addUser(user)
}
}
}
LoginActivity.kt
class LoginActivity : AppCompatActivity() {
private lateinit var mAuth : FirebaseAuth
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
mAuth = FirebaseAuth.getInstance()
login_button.setOnClickListener {
val email = login_email.text.toString().trim()
val password = login_password.text.toString().trim()
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
//Login Success
val intent = Intent (this, MainActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or
Intent.FLAG_ACTIVITY_CLEAR_TASK
}
startActivity(intent)
}else{
//Login Failure
task.exception?.message?.let {
toast(it)
}
}
}
}
}
}
MainActivity.kt (显示用户详细信息)
class MainActivity : AppCompatActivity() {
private val currentUser = FirebaseAuth.getInstance().currentUser
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
currentUser?.let { user ->
main_email.setText(user.email)
main_name.setText("Don't Know")
main_colour.setText("Don't Know")
}
}
}
编辑3
LoginActivity.kt
class LoginActivity : AppCompatActivity() {
private lateinit var mAuth : FirebaseAuth
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
mAuth = FirebaseAuth.getInstance()
login_button.setOnClickListener {
val email = login_email.text.toString().trim()
val password = login_password.text.toString().trim()
loginUser (email, password)
}
}
private fun loginUser(email: String, password: String) {
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
//Login Success
val intent = Intent(this,MainActivity::class.java)
intent.putExtra("username",user.displayName)
intent.putExtra("email",user.email)
startActivity(intent)
}else{
//Login Failure
task.exception?.message?.let {
toast(it)
}
}
}
}
override fun onStart() {
super.onStart()
mAuth.currentUser?.let {
login()
}
}
}
MainActivity.kt
class MainActivity : AppCompatActivity() {
//I have commented out the line below because it may not be required...
// private val currentUser = FirebaseAuth.getInstance().currentUser
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//I have commented out the lines below because they may not be required...
//currentUser?.let { user ->
//main_email.setText(user.email)
//main_name.setText("Don't Know")
//main_colour.setText("Don't Know")
//}
}
}
错误1:putExtra上的重载分辨率不明确
错误2:用户上未解析的引用。
答案 0 :(得分:3)
在登录阶段启动时
mAuth.signInWithEmailAndPassword(email, password)
它具有一个回调,该回调将在用户登录后完成并成功,在该回调中,您已经登录并且该用户现在对应一个唯一的用户ID,您可以通过执行以下操作访问该用户ID < / p>
val user = FirebaseAuth().getInstance().currentUser.uid
然后,您可以在此处获取该用户数据,并将其作为额外或捆绑传递给您的MainActivity,因此登录过程将花费时间来记录用户,获取其数据并将其发送给MainActivity,这样您就可以不会再延迟用户在您的MainActivity上的时间
启动成功的回调后,您可以看到已经创建了该用户,然后在Firebase控制台中,可以在“身份验证”标签中检查该用户。
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
//Login Success, here you can get currentUser
val user = FirebaseAuth().getInstance().currentUser
login(user.displayName,user.email)
}else{
//Login Failure
task.exception?.message?.let {
toast(it)
}
}
}
然后,只需将这两个参数添加到login()方法中,然后对这些值进行putExtra并将这些值作为额外的值发送至main活动,因此您无需获取mainactivity,而只是从中发送值登录
请记住,在.addonCompleteListener()
之后,结果是您当前的登录用户,因此您可以从此处获取currentUser信息或currentUser ID
在onComplete内部,只需将数据传递给MainActivity
val intent = Intent(this,MainActivity::class.java)
intent.putExtra("username",user.displayName)
intent.putExtra("email",user.email)
startActivity(intent)
然后在您的MainActivity中获得此额外功能
val extras = getIntent().extras
val userName: String?
val email: String?
if (extras != null) {
userName = extras.getString("userame")
email = extras.getString("email")
}
那么您已经拥有了登录MainActivity的数据
要更改颜色,只需在MainActivity中进行更改
your_text_view.setTextColor(ContextCompat.getColor(this,R.color.yourColor)
请阅读this