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

问题描述 投票:0回答:1

enter image description here

我将上述数据结构存储在Cloud Firestore中。我要保存车队,这是在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());
            });
}

这是数组结果:

[{name=Caminhão, id=1}, {name=Escavadeira, id=2}, {name=Carregadeira, id=3}, {name=Trator, id=4}]
java android firebase google-cloud-firestore
1个回答
1
投票

正如您所说,您的fleets字段是一个地图数组。您在调试输出中看到的正是我所期望的。请注意,外部方括号指示Java List类型对象,内部大括号指示其中的Java Map类型对象。但是,您的通用类型是错误的。您应该使用List<String>代替List<Map<String, Object>>来处理列表中的Map对象。

如果要使用List<String>,则必须编写一些代码才能从Map中提取所需的字符串,并使用该值构建新的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);
}

现在您有了列表中的地图名称列表。

© www.soinside.com 2019 - 2024. All rights reserved.