首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >文档引用必须有偶数段。

文档引用必须有偶数段。
EN

Stack Overflow用户
提问于 2022-01-08 19:19:42
回答 1查看 359关注 0票数 1

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

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

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

我已经发现,错误在我的应用程序在FirestoreClass().loadUserData_fragment(this)中的片段端,因为在注销后注释这一行将允许应用程序运行,但是在活动中,数据仍然可以作为活动加载数据加载,并且片段是相同的,所以我不明白为什么它不会在签出之后加载到片段中,而是将首次加载。

片段

代码语言:javascript
复制
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        FirestoreClass().loadUserData_fragment(this)
}

活性

代码语言:javascript
复制
 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityUpdateProfileBinding.inflate(layoutInflater)
        val view : LinearLayout = binding.root
        setContentView(view)

        setupActionBar()

        FirestoreClass().loadUserData(this)
}

GetCurrentUserID

代码语言:javascript
复制
 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
    }

活动版本

代码语言:javascript
复制
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)
                    }


                }

            }
    }

片段版

代码语言:javascript
复制
 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)
                    }
                }

            }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-08 19:22:53

您的getCurrentUserID()似乎没有返回任何值,您在代码中没有处理这个值。最好的选择是只在有活动用户时调用loadUserData,但也可以检查getCurrentUserID()是否返回值:

代码语言:javascript
复制
fun loadUserData(activity:Activity){
  if (getCurrentUserID() != "") { // 
    mFireStore.collection(Constants.USERS)
        .document(getCurrentUserID())
        .get()
        .addOnSuccessListener { document ->
            ...
        }
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70635625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档