我将上述数据结构存储在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}]
正如您所说,您的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);
}
现在您有了列表中的地图名称列表。