geoQuery不输出数据时该怎么办?

时间:2018-07-01 15:28:39

标签: android firebase firebase-realtime-database geofire

我正在使用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");
        }
    });
}

1 个答案:

答案 0 :(得分:0)

执行地理查询时,onDataEntered将立即为该范围内的每个节点触发。为所有节点调用onDataEntered后,将调用您的onGeoQueryReady,以表示查询的初始结果已处理。

如果其他节点随后输入了查询范围,则您的onDataEntered也将触发。为进入范围的所有节点调用onDataEntered之后,再次调用onGeoQueryReady表示更新结束。