Что делать, если geoQuery не выводит данные? - PullRequest
0 голосов
/ 01 июля 2018

Я использую 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");
        }
    });
}

1 Ответ

0 голосов
/ 01 июля 2018

При выполнении гео-запроса onDataEntered немедленно срабатывает для каждого узла в диапазоне. Когда onDataEntered был вызван для всех узлов, ваш onGeoQueryReady вызывается, чтобы сигнализировать, что начальные результаты для запроса были обработаны.

Если другой узел входит в диапазон запроса впоследствии, ваш onDataEntered также будет срабатывать. После вызова onDataEntered для всех узлов, входящих в диапазон, снова вызывается ваш onGeoQueryReady, чтобы сообщить об окончании обновления.

...