我正在使用GeoFire读取Firebase中的位置数据,然后将其添加到Google地图中。
当我运行GeoQueryDataEventListener ()
方法时,根据设置的中心和半径,它不会产生任何结果(这很好是因为我没有为这些参数加载信息)。 / p>
然后,当发生这种情况时,我希望发出警报,以供用户更改搜索半径(例如)。
我应在GeoQueryDataEventListener ()
方法的哪一部分插入警报?我正在测试所有子方法,但没有一个成功。
我留下了我编写的代码:
private void leerUbicaciones() {
GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(userLatitude, userLongitude), radio);
geoQuery.addGeoQueryDataEventListener(new GeoQueryDataEventListener() {
@Override
public void onDataEntered(DataSnapshot dataSnapshot, GeoLocation location) {
final String key = dataSnapshot.getKey();
firebaseDatabase = FirebaseDatabase.getInstance();
firebaseDatabase.getReference().child("location/" + key).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mMap.addMarker(new MarkerOptions()
.snippet(dataSnapshot.child("city").getValue(String.class))
.title(dataSnapshot.child("name").getValue(String.class))
.draggable(false)
.position(new LatLng(dataSnapshot.child("latitude").getValue(Double.class), dataSnapshot.child("longitude").getValue(Double.class))));
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.v("TAG", "onCancelled");
}
});
}
@Override
public void onDataExited(DataSnapshot dataSnapshot) {
Log.v("TAG", "onDataExited");
}
@Override
public void onDataMoved(DataSnapshot dataSnapshot, GeoLocation location) {
Log.v("TAG", "onDataMoved");
}
@Override
public void onDataChanged(DataSnapshot dataSnapshot, GeoLocation location) {
Log.v("TAG", "onDataChanged");
}
@Override
public void onGeoQueryReady() {
Log.v("TAG", "onGeoQueryReady");
}
@Override
public void onGeoQueryError(DatabaseError error) {
Log.v("TAG", "onGeoQueryError");
}
});
}
答案 0 :(得分:0)
执行地理查询时,onDataEntered
将立即为该范围内的每个节点触发。为所有节点调用onDataEntered
后,将调用您的onGeoQueryReady
,以表示查询的初始结果已处理。
如果其他节点随后输入了查询范围,则您的onDataEntered
也将触发。为进入范围的所有节点调用onDataEntered
之后,再次调用onGeoQueryReady
表示更新结束。