Я использую 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 не вызывается.
Ах, извините, я неправильно понял ваш вопрос. Вы захотите использовать onGeoQueryReady, чтобы определить, когда запрос выполнен. Напишу ответ.
Когда вы выполняете гео-запрос, onDataEntered немедленно срабатывает для каждого узла в пределах диапазона. Когда onDataEntered вызывается для всех узлов, вызывается ваш onGeoQueryReady, чтобы сигнализировать, что начальные результаты запроса были обработаны.
Если после этого в диапазон запроса войдет другой узел, ваш onDataEntered также сработает. После того, как onDataEntered был вызван для всех узлов, входящих в диапазон, ваш onGeoQueryReady снова вызывается, чтобы сигнализировать об окончании обновления.
Во-первых, необходимо проверить, вызывается ли ваш
onDataEntered, либо путем добавления оператораLog.v("TAG", "onDataEntered");в качестве первой строки внутри него, либо путем запуска кода в отладчике и установки точки останова на первой строке внутри него.