【问题标题】:Why are no documents being returned?为什么没有文件被退回?
【发布时间】:2021-04-12 21:42:52
【问题描述】:

我在尝试写入 Firestore 数据库时遇到此错误,我不知所措。这是因为documentReference.getDocuments() 是空的,但我希望它不是空的。

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.get(ArrayList.java:437)
    at com.uni.strengthprogression.data.FirebaseManager$9.onSuccess(FirebaseManager.java:120)
    at com.uni.strengthprogression.data.FirebaseManager$9.onSuccess(FirebaseManager.java:117)

第 117 行:

.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {

第 120 行:

String id = documentReference.getDocuments().get(0).getId();

完整方法:

public static void addBenchSession(String userEmail, Session session, BackGroundTaskOperation backGroundTaskOperation) {
        db.collection("users").whereEqualTo("email", userEmail).get()
                .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                    @Override
                    public void onSuccess(QuerySnapshot documentReference) {
                        String id = documentReference.getDocuments().get(0).getId();
                        db.collection("users")
                                .document(id)
                                .update("bench_sessions", FieldValue.arrayUnion(session.toMap()))
                                .addOnSuccessListener(new OnSuccessListener<Void>() {
                                    @Override
                                    public void onSuccess(Void aVoid) {
                                        Log.d(TAG, "Successfully added document");
                                        backGroundTaskOperation.onSuccess(null);
                                    }
                                })
                                .addOnFailureListener(new OnFailureListener() {
                                    @Override
                                    public void onFailure(@NonNull Exception e) {
                                        Log.w(TAG, "Error adding document", e);
                                    }
                                });
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.w(TAG, "Error adding document", e);
                    }
                });
    }

【问题讨论】:

  • 报错信息很清楚:Size: 0.
  • 是的,我不知道为什么
  • 大概是因为documentReference.documents是空的。
  • userEmail 的值是多少?它可能与任何文档都不匹配,因此查询什么也没找到并返回一个空列表。
  • 如果你把这行db.collection("users").whereEqualTo("email", userEmail).get()改成db.collection("users").whereEqualTo("email", "test3@test.com").get(),能用吗?

标签: java android firebase google-cloud-firestore


【解决方案1】:

Andreas 和 Alex 是正确的... userEmail 为空,因为我没有正确使用 putExtra() 和 getExtra()。

【讨论】:

    猜你喜欢
    • 2015-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多