首页 > 解决方案 > 错误 de firebase 无效的文档参考

问题描述

我有 java.lang.IllegalArgumentException: Invalid document reference 的问题。文档引用必须有偶数个段,但用户有 1

任何帮助表示赞赏

这是我的代码:

val uid = FirebaseAuth.getInstance().uid ?: ""

        db.collection("users").document(uid).get().addOnSuccessListener {
            usernameTextView.setText(it.get("username") as String)
        }

错误


E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.proxxcord.memesproxx, PID: 9982
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.proxxcord.memesproxx/com.proxxcord.memesproxx.HomeActivity}: java.lang.IllegalArgumentException: Invalid document reference. Document references must have an even number of segments, but users has 1
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3555)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3707)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2220)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:237)
        at android.app.ActivityThread.main(ActivityThread.java:8019)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
     Caused by: java.lang.IllegalArgumentException: Invalid document reference. Document references must have an even number of segments, but users has 1
        at com.google.firebase.firestore.DocumentReference.forPath(DocumentReference.java:81)
        at com.google.firebase.firestore.CollectionReference.document(CollectionReference.java:104)
        at com.proxxcord.memesproxx.HomeActivity.onCreate(HomeActivity.kt:75)
        at android.app.Activity.performCreate(Activity.java:7957)
        at android.app.Activity.performCreate(Activity.java:7946)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3530)

标签: androidfirebasekotlin

解决方案


这通常意味着您的uid变量没有值或为空。

实际上,您可以通过使用?:in 来自己创建它:

val uid = FirebaseAuth.getInstance().uid ?: ""

相反,您需要检查是否有当前用户,并且只有在这种情况下才尝试加载他们的数据。

if (FirebaseAuth.getInstance().getCurrentUser() != null) {
    val uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
    db.collection("users").document(uid).get().addOnSuccessListener {
        usernameTextView.setText(it.get("username") as String)
    }
}

推荐阅读