繁体   English   中英

从 Cloud Firestore 数据库检索数据时出错

[英]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")

这是我的 Firestore 数据库的图片: 数据库

我认为当您使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM