如何使用 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。