要解决Android地理围栏不起作用且onGeoQueryReady()方法每次调用的问题,你可以按照以下步骤进行操作:
GeoFire geoFire = new GeoFire(FirebaseDatabase.getInstance().getReference("your_reference"));
GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(latitude, longitude), radius);
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
// 当某个位置在围栏内时被调用
Log.d("TAG", "onKeyEntered: " + key);
}
@Override
public void onKeyExited(String key) {
// 当某个位置离开围栏时被调用
Log.d("TAG", "onKeyExited: " + key);
}
@Override
public void onKeyMoved(String key, GeoLocation location) {
// 当某个位置移动时被调用
Log.d("TAG", "onKeyMoved: " + key);
}
@Override
public void onGeoQueryReady() {
// 当查询完成时被调用,即围栏内的所有位置都被检索完毕
Log.d("TAG", "onGeoQueryReady");
}
@Override
public void onGeoQueryError(DatabaseError error) {
// 当查询发生错误时被调用
Log.e("TAG", "onGeoQueryError: " + error.getMessage());
}
});
确保你的数据库中包含了正确的位置数据,并且在查询中使用正确的经纬度和半径。
如果你发现onGeoQueryReady()方法每次调用,你可以检查是否在每次调用前都重新初始化了GeoQuery对象。如果是这样,请确保在每次查询之前,先调用geoQuery.removeAllListeners()
来移除之前的监听器。
// 在每次查询之前移除之前的监听器
geoQuery.removeAllListeners();
通过按照以上步骤操作,你应该能够解决Android地理围栏不起作用且onGeoQueryReady()方法每次调用的问题。