我向我的Cloud Firestore数据库发送了Map<String, LatLng>
。现在,我想以地图的形式检索数据。然后,我想将该Map发送到我的片段,以便该片段可以在Google地图上绘制LatLng。
这就是我所做的:
我成功地从数据库中检索了数据,但是错误出在片段中,我想从地图上获取LatLng。
我如何检索数据: MapsActivity:
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。
因此,我将该数据发送到片段。
这是我的做法:
MapsActivity:
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
上:
错误:类型不兼容:对象无法转换为Map
然后,另一个错误发生在LatLng pCoord = ploc.get("Location")
上。
我认为当您使用getData()
时,它将文档的字段作为Map返回。
那么,为什么arrayOfPins
中的元素不是Maps
?
答案 0 :(得分:1)
我认为当您使用getData()时,它将文档的字段作为Map返回。
实际上,QueryDocumentSnapshot的getData()方法返回一个Map<String, Object>
对象。但是,要在Location
属性下获取数据,您应该在QueryDocumentSnapshot对象上显式调用.get("Location")
,如以下代码行所示:
pinColRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Map<String, Object> map = (HashMap<String, Object>) document.get("Location");
if (map != null) {
Log.d("TAG", map.get("latitude") + ", " + map.get("longitude"));
//Add the markers on the map
}
}
} else {
Log.d(TAG, task.getException().getMessage());
}
}
});