【问题标题】:How to use single activity for different users at the same time with firebase如何使用firebase同时为不同用户使用单个活动
【发布时间】: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()
        }

【问题讨论】:

  • 很可能您在退出时没有更新profileIduser,但根据您共享的代码无法说明如何解决此问题。请参阅how to create a minimal, complete, verifiable example 以最大限度地提高有人提供帮助的机会。
  • @FrankvanPuffelen 我更新了我的代码,请检查一下。

标签: android firebase-authentication sharedpreferences


【解决方案1】:

您只需要在像这样进入个人资料活动时分享偏好值

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 是您用来切换到配置文件活动的按钮。

【讨论】:

    【解决方案2】:

    当用户退出时,您需要从共享首选项中清除 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()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-15
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多