android - 错误 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)
解决方案
这通常意味着您的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)
}
}
推荐阅读
- json - Nexmo Voice API - 连接两个用户并向每个用户播放不同的谈话动作
- json - 有条件地合并对象内的两个列表
- sql - 在 BigQuery (SQL) 中构建笛卡尔连接的简洁方法
- c# - 如何从具有多行字符串的 C# 文本框中提取 2D 数组?
- windows - 如何在 Windows 中运行 zookeeper.sh 文件
- php - Woocommerce - 获得最畅销的类别(分类)
- selenium - 为什么在将 Firefox 配置为下载文件而不另存为对话框后,Firefox 会从 URL 下载名称为“文档”的 PDF 文件而不是实际名称?
- python - 带有aws s3的django rest框架
- express - 从arduino上的电路游乐场快递接收红外号码
- sql - 使用 group by 计算查询但排除用户