【发布时间】:2018-12-10 00:00:00
【问题描述】:
我正在使用 GeoFire 读取 Firebase 中的位置数据,然后将其添加到 Google 地图中。
当我运行GeoQueryDataEventListener () 方法时,根据中心和半径设置,它不会产生任何结果(这很好,因为我没有为这些参数加载信息)。
然后,当发生这种情况时,我希望向用户发出警报以更改搜索半径(例如)。
我应该在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");
}
});
}
【问题讨论】:
-
首先是检查你的
onDataEntered是否被调用,方法是在其中的第一行添加Log.v("TAG", "onDataEntered");语句,或者在调试器中运行代码并在里面的第一行。 -
我检查了它,但没有结果 onDataEntered 方法没有被调用。
-
啊,对不起,我看错了你的问题。您需要使用
onGeoQueryReady来检测查询何时完成。我会写一个答案。
标签: android firebase firebase-realtime-database geofire