如何从 Real-time Firebase 检索使用 Geofire 设置的多个位置并在 Android Studio 的地图上显示它们?

Posted

技术标签:

【中文标题】如何从 Real-time Firebase 检索使用 Geofire 设置的多个位置并在 Android Studio 的地图上显示它们?【英文标题】:How to retrieve multiple location which set by using Geofire from Real-time Firebase and show them on map in Android Studio? 【发布时间】:2022-01-02 00:18:50 【问题描述】:

我的应用程序的目的是从实时 Firebase 中检索所有用户的当前位置,并将其显示在 android Studio 的地图上。用户的位置使用 GeoFire 设置并存储在实时火力库中。设置GeoFire的代码如下:

private void settingGeoFire() 
    String firebaseAuth = FirebaseAuth.getInstance().getUid();
    myLocationRef = FirebaseDatabase.getInstance().getReference("UserLocation/"+firebaseAuth);
    geoFire = new GeoFire(myLocationRef);

实时firebase的结构如下:

问题是如何在实时firebase中检索存储在文件0和1(参见上图)下的所有用户的纬度和经度,并将它们显示为android studio中地图上的多个标记?如果您能提供帮助,谢谢!

【问题讨论】:

【参考方案1】:

要从(0)和(1)节点获取纬度和经度的值,请使用以下代码行:

DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference userLocationRef = db.child("UserLocation");
userLocationRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() 
    @Override
    public void onComplete(@NonNull Task<DataSnapshot> task) 
        if (task.isSuccessful()) 
            for (DataSnapshot ds : task.getResult().getChildren()) 
                doube lat = ds.child("You").child("l").child("0").getValue(Double.class);
                doube lng = ds.child("You").child("l").child("1").getValue(Double.class);
                Log.d("TAG", lat + ", " + lng); //Check the values

                //Add location on Google Map
                LatLng location = new LatLng(lat, lng);

                map.addMarker(new MarkerOptions()
                        .position(location)
                        .title(lat + ", " + lng)
                        .showInfoWindow();
            
         else 
            Log.d("TAG", task.getException().getMessage()); //Don't ignore potential errors!
        
    
);

【讨论】:

先生,非常感谢,它有效!但是我遇到了两个问题! 1)我可以知道每个用户位置的信息窗口可以重命名为存储在firebase firestore中的用户名以区分用户吗? 2)用户的位置(标记)不能从实时火力库中持续更新。我必须关闭活动并重新打开活动才能更新位置(标记)。 1) 在数据库中的每个用户对象下添加用户名,然后以与 lat 和 lng 类似的方式获取它。 2) 为此,您必须使用实时侦听器并在位置更新后删除旧位置。如果您在实现这些功能时遇到困难,请在 *** 上使用自己的MCVE 发布一个新问题,以便我和其他 Firebase 开发人员可以帮助您。 非常感谢先生! 先生,我已经使用实时监听器实时读取多个用户的位置。但我不知道如何删除用户的旧标记。该链接是我发布的新问题,希望您能看一下,谢谢。 (***.com/questions/70115230/…) 我去看看,如果我知道答案,我会写信给你。

以上是关于如何从 Real-time Firebase 检索使用 Geofire 设置的多个位置并在 Android Studio 的地图上显示它们?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Firebase 同步检索数据?

如何从 Firebase 授权中检索信息

如何从 Firebase 检索图像作为布尔数据?

如何从firebase数据中检索数据短片

如何从 Firebase 实时数据库中检索特定数据?

如何从 Firebase 存储中检索图像预览?