Android geofire 获取一定半径内的用户列表

标签 android firebase firebase-realtime-database geofire

我正在尝试将所有用户添加到距离用户位置一定距离内的列表中。我已成功获取用户当前位置,并使用 geofire 将其存储在我的数据库中。我知道我必须使用 geofire 来查询结果,但我不确定如何将用户添加到我的列表中。我相信这是在 onKeyEntered 方法中完成的,但我不确定。

    private void addLocationToDB()
{
    database = FirebaseDatabase.getInstance().getReference("Leaderboard").child(userID);

    geoFire = new GeoFire(database);

    geoFire.setLocation("Location", new GeoLocation(latitude, longitude), new GeoFire.CompletionListener()
    {
        @Override
        public void onComplete(String key, DatabaseError error)
        {
            if(error != null)
            {
                Log.d(TAG, "Problem storing users location - onComplete: " + error.getMessage());
            }

            else
            {
                getListNearbyUsers();
            }
        }
    });
}

private void getListNearbyUsers()
{
    geoQuery = geoFire.queryAtLocation(new GeoLocation(latitude, longitude), 1);

    geoQuery.addGeoQueryEventListener(new GeoQueryEventListener()
    {
        @Override
        public void onKeyEntered(String key, GeoLocation location)
        {
            nearbyUsers.add(key);
        }

        @Override
        public void onKeyExited(String key)
        {

        }

        @Override
        public void onKeyMoved(String key, GeoLocation location)
        {

        }

        @Override
        public void onGeoQueryReady()
        {

        }

        @Override
        public void onGeoQueryError(DatabaseError error)
        {

        }
    });
}

最佳答案

任何正在寻找答案的人我都发现了我的错误。此方法应将用户 ID 作为参数而不是“位置”。然后我可以将所有“ key ”作为用户 ID 并过滤数据。希望这对遇到同样问题的人有所帮助。

geoFire.setLocation("Location", new GeoLocation(latitude, longitude), new GeoFire.CompletionListener()
{
    @Override
    public void onComplete(String key, DatabaseError error)
    {
        if(error != null)
        {
            Log.d(TAG, "Problem storing users location - onComplete: " + error.getMessage());
        }

        else
        {
            getListNearbyUsers();
        }
    }
});

关于Android geofire 获取一定半径内的用户列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55042969/

相关文章:

android - 如何从 Android 中的 SQLite 中获取记录

android - 如何在方向/配置更改后维护 ListView fragment 状态?

android - 使用 Firebase 进行 Robolectric 应用程序测试

angular - 从刚刚创建的对象获取 Firebase ID

Android - 多个应用程序的相同核心功能

json - Firebase 数据库规则 UID 所有访问

android - Firebase set value 重写 children- Android

java - 带推送 utf8 字符串的 Firebase Java API

Swift Firebase 数据库获取数据

android - 报警管理器 : How to Call Alarm Manager at particular time?