Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从Firestore获取数组内的映射值?_Java_Android_Firebase_Google Cloud Firestore - Fatal编程技术网

Java 如何从Firestore获取数组内的映射值?

Java 如何从Firestore获取数组内的映射值?,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我将上述数据结构存储在CloudFireStore中。我想保存舰队,这是一组存储在Firestore中的带有“id”和“name”的地图。我很难获取数据并将其存储为数组。我只能得到一个奇怪的字符串,但有没有方法可以存储为字符串数组?下面是我使用的代码 public void getFleets() { DocumentReference document = mDb .collection(FirestoreService.CLIENT_COLLECTION)

我将上述数据结构存储在CloudFireStore中。我想保存舰队,这是一组存储在Firestore中的带有“id”和“name”的地图。我很难获取数据并将其存储为数组。我只能得到一个奇怪的字符串,但有没有方法可以存储为字符串数组?下面是我使用的代码

public void getFleets() {

    DocumentReference document = mDb
            .collection(FirestoreService.CLIENT_COLLECTION)
            .document(new SessionService(getApplicationContext()).getClientUID());

    document.get()
            .addOnCompleteListener(task -> {
                if (task.isSuccessful() && task.getResult() != null) {
                    DocumentSnapshot doc = task.getResult();
                    List<String> group = (List<String>) doc.get("fleets");
                    Log.i(TAG, "getFleets: " + group);

                } else
                    Log.d(TAG, "Error getting documents: ", task.getException());
            });
}

正如您所说,您的
车队
字段是一组地图。您在调试输出中看到的正是我所期望的。请注意,外部方括号表示java列表类型对象,内部大括号表示其中的java映射类型对象。但是,您的泛型类型是错误的。您应该使用
List
来说明列表中的地图对象,而不是
List

如果您想要一个
列表
,则必须编写一些代码从映射中提取所需的字符串,并使用该值构建一个新列表。因此,如果要从每个映射项中删除
name
属性,可以执行以下操作:

List<Map<String, Object>> groups = (List<Map<String, Object>>) doc.get("fleets");
ArrayList<String> names = new ArrayList<>();
for (Map<String, Object> group : groups) {
    String name = group.get("name");
    names.add(name);
}
List group=(List)doc.get(“车队”);
ArrayList name=新的ArrayList();
用于(地图组:组){
String name=group.get(“name”);
名称。添加(名称);
}
现在,您有了列表中地图中的名称列表。

您也可以直接使用。
List<Map<String, Object>> groups = (List<Map<String, Object>>) doc.get("fleets");
ArrayList<String> names = new ArrayList<>();
for (Map<String, Object> group : groups) {
    String name = group.get("name");
    names.add(name);
}