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'

使用 Geoquery 解析查询

如何使用 GEOquery 包提取示例标题(名称)?

使用 GEOquery 从 GEO 检索数据表标题

如何在另一个项目中使用 Geoquery 与 android 中的 geofire 实时数据库?

GeoFire Android:GeoQuery 只显示最近的用户,而不是所有附近的用户