【发布时间】:2020-04-30 09:41:02
【问题描述】:
我想知道如何在单个活动中检索不同的用户信息。
就我而言,我有一个 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()
}
onStop...
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()
}
}
}
这就是我从适配器到其他用户的意图(配置文件活动)。
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或user,但根据您共享的代码无法说明如何解决此问题。请参阅how to create a minimal, complete, verifiable example 以最大限度地提高有人提供帮助的机会。 -
@FrankvanPuffelen 我更新了我的代码,请检查一下。
标签: android firebase-authentication sharedpreferences