Я делаю приложение для Android и использую firebase и geofire. Когда я нажимаю кнопку «Find Sameway Rides», она показывает мне пользователей, которые находятся в радиусе 700 м рядом со мной. Но когда нет пользователя, он возвращает еще один маркер (зеленый маркер) в моем местоположении (розовый маркер). Я не знаю, что не так с моим кодом. Я много пробовал, но проблема остается прежней. Я даже попросил поддержку Firebase для помощи, но они не смогли ее исправить. Так что, пожалуйста, помогите.GeoFire помещает другой маркер в исходное местоположение, если поблизости нет пользователя
Var. которые вы должны знать
private DatabaseReference mDatabase;
//for geofire
private DatabaseReference geoDatabase;
public GeoFire geoFire;
public GeoQuery geoQuery;
// [START initialize_database_ref]
mDatabase = FirebaseDatabase.getInstance().getReference();
// [END initialize_database_ref]
geoDatabase = mDatabase.child("/Ridedata/Geodatafrom/");
geoFire = new GeoFire(geoDatabase);
Теперь вот что происходит onbutton нажмите
// post data to server and show nearby rides
public void nowFindRide(View view) throws JSONException {
//Sending user info to database...
final String from = eetsource.getText().toString();
final String to = eetdestination.getText().toString();
final String when = leavetext.getText().toString();
final String name = user_name.getText().toString();
final String email = user_email.getText().toString();
final String picture = profile_pic_url.getString("url");
userAuth = FirebaseAuth.getInstance();
authCurrentUser = userAuth.getCurrentUser();
final String uKey = authCurrentUser.getUid();
double fromLat = currentLatLng.latitude;
double fromLong = currentLatLng.longitude;
if (fromLat == 0.0 && fromLong == 0.0) {
fromLat = sourcelat;
fromLong = sourcelong;
} else {
fromLat = currentLatLng.latitude;
fromLong = currentLatLng.longitude;
}
final long uid = Id;
// post data to server.
final String uniqueKey = mDatabase.child("Ridedata").push().getKey();
LocationData locationData = new LocationData(name, from, to, when, picture, email);
Map<String, Object> dataValues1 = locationData.toMap();
final Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put("/Ridedata/" + "/Ridedetail/" + uKey, dataValues1);
geoFire.setLocation(uKey, new GeoLocation(fromLat, fromLong));
geoQuery = geoFire.queryAtLocation(new GeoLocation(fromLat, fromLong), radius);
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(final String key, final GeoLocation location) {
geoDatabase.child("Geodatafrom").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d(TAG,"data change:"+ dataSnapshot);
// One nearbyUser = dataSnapshot.getValue(One.class);
setNearbyMarker(new LatLng(location.latitude,location.longitude));
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(TAG,"the read failed: " + databaseError.getMessage());
}
});
}
@Override
public void onKeyExited(String key) {
Log.d(TAG,"Key %s is no longer in the search area" + key);
}
@Override
public void onKeyMoved(String key, GeoLocation location) {
Log.d(TAG,String.format("Key %s moved within the search area to [%f,%f]",
key, location.latitude, location.longitude));
}
@Override
public void onGeoQueryReady() {
Log.d(TAG,"All initial data has been loaded and events have been fired!");
}
@Override
public void onGeoQueryError(DatabaseError error) {
Log.d(TAG,"There was an error with this query: " + error);
}
});
mDatabase.updateChildren(childUpdates);
// done flushing data into database.
}
Вот моя база данных Firebase database for my project И скриншот проблемы Screenshot showing the problem
правила Geofire
"Geofire": {
".indexOn": "g"
}
Какой из методов запускается, что не должно быть? Если его 'onKeyEntered', вы сможете увидеть, какие ключевые триггеры неверно. –
Когда кто-то рядом, он правильно показывает мне это местоположение пользователя с зеленым маркером. Итак, в этот момент onKeyEntered и onDataChange работают отлично. И onKeyEntered, onDataChange отвечает за отображение соседних маркеров в моем случае. По вашему мнению, есть некоторые проблемы с мои правила geofire? Сэр, пожалуйста, я хочу, чтобы эта проблема исчезла. – Shubhendra
Вам нужно будет запустить код в отладчике и посмотреть, какой ключ запускает 'onKeyEntered'. После того, как вы знаете, что * вызывает триггеры, вы можете надеяться выяснить, почему это срабатывает. –