【发布时间】:2020-12-18 12:05:42
【问题描述】:
我向我的 Cloud Firestore 数据库发送了 Map<String, LatLng>。现在,我想将数据作为地图检索。然后,我想将该地图发送到我的片段,以便片段可以在谷歌地图上绘制 LatLng。
这是我所做的:
我成功从数据库中检索到数据,但错误出现在片段中,我想从地图中获取 LatLng。
我如何检索数据: 地图活动:
Source source = Source.DEFAULT;
pinColRef.get(source)
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
ArrayList arrayOfPins = new ArrayList<java.util.Map>();
arrayOfPins.add(document.getData());
Log.i(TAG, document.getData().toString());
}
}
}
});
如您所见,我检索数据,然后使用 getData() 获取我发送的地图。 Log.i 语句成功地将数据库中的数据显示为 Map。
所以,我将该数据发送到片段。
我是这样做的:
地图活动:
public ArrayList getPinData() {
return arrayOfPins;
}
片段:
MapsActivity activity = (MapsActivity) getActivity();
ArrayList arrayOfPins = activity.getPinData();
我如何尝试从数据库中绘制 LatLng(在 Fragment 的 MapReadyCallback 中):
for (java.util.Map ploc : arrayOfPins) {
LatLng pCoord = ploc.get("Location");
map.addMarker(new MarkerOptions()
.position(pCoord)
.title("Pin"));
}
第一个错误出现在java.util.Map ploc:
错误:不兼容的类型:对象无法转换为地图
那么,另一个错误是在LatLng pCoord = ploc.get("Location")。
我认为当您使用getData() 时,它会将文档的字段作为地图返回。
那么,为什么arrayOfPins 中的元素不是Maps?
【问题讨论】:
-
Firestore 只能在其文档中存储 JSON 数据(或可与 JSON 数据相互转换的 Java 类)。但是,如果不了解您如何存储数据以及它在数据库中的样子,就无法说更多。
-
@FrankvanPuffelen 感谢您的回复。如果我添加一张我的 Cloud Firestore 数据库的图片(来自 firebase 控制台)会有帮助吗?
-
@TanayN 是的,这将非常有帮助。也请回复@。
-
@AlexMamo 我做了更改。希望对您有所帮助!
-
@TanayN 请在下面查看我的答案。
标签: java android firebase google-maps google-cloud-firestore