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

时间:2019-03-07 11:43:00

标签: 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)
        {

        }
    });
}

2 个答案:

答案 0 :(得分:1)

任何人都在寻找答案,我发现了自己的错误。此方法应将userID用作参数,而不是“ Location”。然后,我可以将所有“键”作为用户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();
        }
    }
});

答案 1 :(得分:0)

我希望这对您有所帮助,使用户的半径为10km / 10000m

Location mLastLocation;
boolean getUsersAroundStarted = false;    
private void getDriversAround()
{
    getUsersAroundStarted=true;
    database = FirebaseDatabase.getInstance().getReference("Leaderboard").child(userID);

    GeoFire geoFire = new GeoFire(database);
    GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(mLastLocation.getLatitude(),mLastLocation.getLongitude()), 10000);
    geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
        @Override
        public void onKeyEntered(String key, GeoLocation location) {
            //add users to Firebase Database
        }         
    });
}