geoQuery不输出数据怎么办?
Posted
技术标签:
【中文标题】geoQuery不输出数据怎么办?【英文标题】:What to do when geoQuery does not output data? 【发布时间】: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
来检测查询何时完成。我会写一个答案。
【参考方案1】:
当您执行地理查询时,onDataEntered
会立即为范围内的每个节点触发。当所有节点都调用了onDataEntered
时,会调用您的onGeoQueryReady
来表示查询的初始结果已被处理。
如果之后另一个节点进入查询范围,您的onDataEntered
也会触发。在为进入该范围的所有节点调用 onDataEntered
后,再次调用您的 onGeoQueryReady
以发出更新结束的信号。
【讨论】:
以上是关于geoQuery不输出数据怎么办?的主要内容,如果未能解决你的问题,请参考以下文章
不支持解析 GeoQuery 'withinKilometres'