【发布时间】:2019-12-29 14:40:43
【问题描述】:
我正在尝试为我的第一个基本应用程序添加一个不错的功能,该应用程序连接到 Firestore 数据库,获取集合中所有文档的名称并将它们存储在字符串的 ArrayList 中。如下所示,该数据库非常简单,包含一个名为 pedestals 的集合,其中仅包含 3 个文档。每个文档有 4 个字段(jack、jack_laser、name 和 sum):
Firestore snapshot of my database
通过使用 pedestals.whereEqualTo("name", true).get() 我猜对所有名称的查询都已初始化,但我不确定如何从中提取名称。我观看了许多 youtube 视频并尝试了 firestore 的 google code-lab 部分,但它们每个都处理查询文档和存储数据 - 虽然在这里我不想获取所有文档,但只获取他们名称字段的值.
以下是相关方法代码:
private void myFirstQuery2() {
// Get a reference to the pedestal collection
final CollectionReference pedestals = mFirestore.collection("pedestals");
// get all the names of the pedestals in firestore
pedestals.whereEqualTo("name", true).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
for (QueryDocumentSnapshot document : task.getResult()) {
// names.add(document.getString("name"));
names.add(document.getData().toString());
}
String str = Arrays.toString(names.toArray());
Log.e(TAG, "god job: " +str);
Toast.makeText(FileLoading.this, "success!", Toast.LENGTH_LONG).show();
}//end of onSuccess
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(FileLoading.this, "error!", Toast.LENGTH_LONG).show();
Log.e(TAG, "could not get the query");
}
});
};
如您所见,我尝试实现一个 for 循环,将每个文档快照(即使我正在查找字段而不是文档)存储在一个数组中。
在 logcat 终端中我得到:
08-24 17:41:45.786 10738-10738/benda.leveling_v2 E/MyActivity: 天哪:[]
这让我明白 arraylist 是空的。
我在这里做错了什么?
【问题讨论】:
-
在 Firestore 中,您始终可以获取整个文档。
-
@ConstantinBeer 不是真的。查询很浅,这意味着您只能获得该级别的文档信息。你没有得到它的子集合。
-
@GauravMall 我说的是文件。子集合是集合。没有说你得到了子集。 Firestore 不会级联。
-
我们都说了同样的话。我只是误解了你 :) 认为
whole文件是指整个信息的“楼梯”。 -
是的,你的权利。它可能会像我写的那样被误解:) 我的错。
标签: java android firebase google-cloud-firestore