文档引用必须有偶数个段

Document references must have an even number of segments

错误:Document references must have an even number of segments, but Users has 1

我一直在浏览这里和不同论坛上的不同帖子,但在第一次加载时都有问题,但我的问题是在我注销或重设密码之后。当我从 firebase 加载内容时,我得到了信息,但是当我单击注销然后再次登录时,它崩溃了,我得到了这个错误。我已经记录了 users.uid 和文档引用,并且在注销后没有改变。

我的收集路径是用常量完成的,所以我没有错误类型。

我发现错误出在 FirestoreClass().loadUserData_fragment(this) 中我的应用程序的 Fragment 端 由于在注销后注释掉这一行将允许应用程序 运行 但是在 activity 中数据仍然可以作为 activity 加载数据加载并且片段是相同的所以我不明白为什么它在注销后不会加载到片段中,但会在第一次加载时加载。

片段

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        FirestoreClass().loadUserData_fragment(this)
}

Activity

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityUpdateProfileBinding.inflate(layoutInflater)
        val view : LinearLayout = binding.root
        setContentView(view)

        setupActionBar()

        FirestoreClass().loadUserData(this)
}

GetCurrentUserID

 fun getCurrentUserID():String{
        // auto login

        var currentUser =  FirebaseAuth.getInstance().currentUser
        var currentUserId = ""
        if (currentUser != null){
            currentUserId = currentUser.uid
            Log.i("uis",currentUser.uid)
        }

        return  currentUserId
    }

Activity版本

fun loadUserData(activity:Activity){
        mFireStore.collection(Constants.USERS)
            .document(getCurrentUserID())
            .get()
            .addOnSuccessListener { document ->
                val loggedInUser = document.toObject(User::class.java)!!
                Log.i("uis",getCurrentUserID() + Constants.USERS)
                when(activity){
                    is UpdateProfileActivity ->{
                        activity.setUserDataInUI(loggedInUser)
                    }
                    is LoginActivity -> {
                        // Call a function of base activity for transferring the result to it.
                        activity.userLoggedInSuccess(loggedInUser)
                    }


                }

            }
    }

片段版本

 fun loadUserData_fragment(fragment: Fragment){
        mFireStore.collection(Constants.USERS)
            .document(getCurrentUserID())
            .get()
            .addOnSuccessListener { document ->
                val loggedInUser = document.toObject(User::class.java)!!
                Log.i("uis",getCurrentUserID() + Constants.USERS)
                when(fragment){
                    is HomeFragment ->{
                        fragment.setUserDataInUIFragment(loggedInUser)
                    }
                }

            }
    }

你的 getCurrentUserID() returns 似乎没有价值,你没有在你的代码中处理。最好的选择是仅在有活动用户时调用 loadUserData,但您也可以检查 getCurrentUserID() returns 是否为一个值:

fun loadUserData(activity:Activity){
  if (getCurrentUserID() != "") { // 
    mFireStore.collection(Constants.USERS)
        .document(getCurrentUserID())
        .get()
        .addOnSuccessListener { document ->
            ...
        }
  }
}