[英]Error retrieving data from Cloud Firestore database
我将Map<String, LatLng>
发送到我的 Cloud Firestore 数据库。 现在,我想将数据检索为 Map。然后,我想将该 Map 发送到我的片段,以便该片段可以 plot 谷歌 map 上的 LatLng。
这是我所做的:
我成功地从数据库中检索了数据,但错误出现在片段中,我想从 Map 获取 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() 获取我发送的 Map。 Log.i 语句成功地将数据库中的数据显示为 Map。
所以,我将该数据发送到片段。
我是这样做的:
地图活动:
public ArrayList getPinData() {
return arrayOfPins;
}
分段:
MapsActivity activity = (MapsActivity) getActivity();
ArrayList arrayOfPins = activity.getPinData();
我如何尝试从数据库中获取 LatLng plot(在片段的 MapReadyCallback 中):
for (java.util.Map ploc : arrayOfPins) {
LatLng pCoord = ploc.get("Location");
map.addMarker(new MarkerOptions()
.position(pCoord)
.title("Pin"));
}
第一个错误出现在java.util.Map ploc
上:
错误:不兼容的类型:Object 无法转换为 Map
然后,另一个错误是LatLng pCoord = ploc.get("Location")
。
我认为当您使用getData()
时,它会将文档的字段返回为 Map。
那么,为什么arrayOfPins
中的元素不是Maps
呢?
我认为当您使用 getData() 时,它会将文档的字段返回为 Map。
实际上,QueryDocumentSnapshot 的getData()方法返回一个Map<String, Object>
object。但是,要获取Location
属性下的数据,您应该在 QueryDocumentSnapshot object 上显式调用.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());
}
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.