Android 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)
        {

        }
    });
}

person user10431501    schedule 07.03.2019    source источник


Ответы (1)


Кто ищет ответ, я понял свою ошибку. Этот метод должен принимать идентификатор пользователя в качестве аргумента, а не «Местоположение». Затем я могу получить все «ключи» как идентификатор пользователя и отфильтровать данные. Надеюсь, это поможет любому с той же проблемой.

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();
        }
    }
});
person user10431501    schedule 07.03.2019