我正在尝试将所有用户添加到距离用户位置一定距离的列表中。我已成功获得用户当前位置,并使用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)
{
}
});
}
任何寻找答案的人我都弄清楚了我的错误。此方法应将userID作为参数而不是“Location”。然后,我可以将所有“键”作为userID并过滤数据。希望这可以帮助任何有同样问题的人。
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();
}
}
});
我希望这可以帮助,让用户在半径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
}
});
}