如何使用 firebase 同时为不同用户使用单个 activity
How to use single activity for different users at the same time with firebase
我想知道如何在单个 activity 中检索不同的用户信息。
在我的例子中,我有一个 ProfileActivity,我希望当我点击个人资料按钮时,它使用我的 FirebaseAuth
uid 从 Firestore
检索我的信息,当我搜索另一个用户并点击他的个人资料时,它的意图我 ProfileActivity 所以我这样做了,它工作得很好,但问题是当我注销并再次登录时,我的旧信息出现了,当我单击后退按钮并返回到 ProfileActivity 后,它现在显示我的信息,所以我不明白为什么我的信息在登录后不显示我。
private lateinit var profileId: String //initialization...
在 onCreate 中...
firebaseUser= FirebaseAuth.getInstance().currentUser!!
val pref = getSharedPreferences("PREF", Context.MODE_PRIVATE)
if (pref != null)
{
this.profileId = pref.getString("profileId", "none").toString()
}
停止...
override fun onStop() {
super.onStop()
val pref = getSharedPreferences("PREF", Context.MODE_PRIVATE)?.edit()
pref?.putString("profileId", firebaseUser.uid)
pref?.apply()
}
在 oncreate 中调用 userInfo 检索信息的方法
private fun userInfo() {
val userRef = FirebaseFirestore.getInstance().collection("Users").document(profileId)
userRef.get()
.addOnSuccessListener { documentSnapshot ->
if (documentSnapshot != null && documentSnapshot.exists()) {
val user = documentSnapshot.toObject(User::class.java)
profile_fullname?.text = user.getFullname()
profile_about?.text = user.getAbout()
}
}
}
这就是我从适配器到其他用户(配置文件 activity)的意图。
holder.itemView.setOnClickListener {
val pref = mContext.getSharedPreferences("PREF", Context.MODE_PRIVATE).edit()
pref.putString("profileId", user.getUid())
pref.apply()
val intent = Intent(mContext, ProfileActivity::class.java )
mContext.startActivity(intent)
}
这是注销操作
logoutButton.setOnClickListener {
FirebaseAuth.getInstance().signOut()
val intent = Intent(this@EditProfileActivity, LoginActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
finish()
}
您需要在用户注销时从共享首选项中清除 profileId
:
logoutButton.setOnClickListener {
FirebaseAuth.getInstance().signOut()
val pref = getSharedPreferences("PREF", Context.MODE_PRIVATE)
if (pref != null) {
SharedPreferences.Editor editor = pref.edit();
editor.remove("profileId");
editor.apply();
}
val intent = Intent(this@EditProfileActivity, LoginActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
finish()
}
您只需在转到配置文件时分享偏好值 activity 就像这样
goToProfileActivityIcon.setOnClickListener {
val pref = mContext.getSharedPreferences("PREF", Context.MODE_PRIVATE).edit()
pref.putString("profileId", currentUserId)
pref.apply()
val intent = Intent(mContext, ProfileActivity::class.java )
mContext.startActivity(intent)
}
goToProfileActivityIcon 是您用来切换到个人资料的按钮 activity。
我想知道如何在单个 activity 中检索不同的用户信息。
在我的例子中,我有一个 ProfileActivity,我希望当我点击个人资料按钮时,它使用我的 FirebaseAuth
uid 从 Firestore
检索我的信息,当我搜索另一个用户并点击他的个人资料时,它的意图我 ProfileActivity 所以我这样做了,它工作得很好,但问题是当我注销并再次登录时,我的旧信息出现了,当我单击后退按钮并返回到 ProfileActivity 后,它现在显示我的信息,所以我不明白为什么我的信息在登录后不显示我。
private lateinit var profileId: String //initialization...
在 onCreate 中...
firebaseUser= FirebaseAuth.getInstance().currentUser!!
val pref = getSharedPreferences("PREF", Context.MODE_PRIVATE)
if (pref != null)
{
this.profileId = pref.getString("profileId", "none").toString()
}
停止...
override fun onStop() {
super.onStop()
val pref = getSharedPreferences("PREF", Context.MODE_PRIVATE)?.edit()
pref?.putString("profileId", firebaseUser.uid)
pref?.apply()
}
在 oncreate 中调用 userInfo 检索信息的方法
private fun userInfo() {
val userRef = FirebaseFirestore.getInstance().collection("Users").document(profileId)
userRef.get()
.addOnSuccessListener { documentSnapshot ->
if (documentSnapshot != null && documentSnapshot.exists()) {
val user = documentSnapshot.toObject(User::class.java)
profile_fullname?.text = user.getFullname()
profile_about?.text = user.getAbout()
}
}
}
这就是我从适配器到其他用户(配置文件 activity)的意图。
holder.itemView.setOnClickListener {
val pref = mContext.getSharedPreferences("PREF", Context.MODE_PRIVATE).edit()
pref.putString("profileId", user.getUid())
pref.apply()
val intent = Intent(mContext, ProfileActivity::class.java )
mContext.startActivity(intent)
}
这是注销操作
logoutButton.setOnClickListener {
FirebaseAuth.getInstance().signOut()
val intent = Intent(this@EditProfileActivity, LoginActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
finish()
}
您需要在用户注销时从共享首选项中清除 profileId
:
logoutButton.setOnClickListener {
FirebaseAuth.getInstance().signOut()
val pref = getSharedPreferences("PREF", Context.MODE_PRIVATE)
if (pref != null) {
SharedPreferences.Editor editor = pref.edit();
editor.remove("profileId");
editor.apply();
}
val intent = Intent(this@EditProfileActivity, LoginActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
finish()
}
您只需在转到配置文件时分享偏好值 activity 就像这样
goToProfileActivityIcon.setOnClickListener {
val pref = mContext.getSharedPreferences("PREF", Context.MODE_PRIVATE).edit()
pref.putString("profileId", currentUserId)
pref.apply()
val intent = Intent(mContext, ProfileActivity::class.java )
mContext.startActivity(intent)
}
goToProfileActivityIcon 是您用来切换到个人资料的按钮 activity。