【发布时间】: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