Android Geofire OnkeyExited не срабатывает - PullRequest
0 голосов
/ 18 октября 2019

Я использую geoquery, чтобы при входе в область другого устройства данные загружались в базу данных Firebase. Проблема в том, что он не работает с onKeyExited при выходе из области (onKeyEntered работает только в первый раз, если он снова входит в область, он не работает). GeoQueryEventListener не обновляется автоматически?

есть идеи?

 final DatabaseReference drivers = FirebaseDatabase.getInstance().getReference(pickup);
                        GeoFire gfDrivers = new GeoFire(drivers);

                        final GeoQuery geoQuery = gfDrivers.queryAtLocation(new GeoLocation(mLastLocation.getLatitude(), mLastLocation.getLongitude()), radius);
                        geoQuery.removeAllListeners();

                        geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
                            @Override
                            public void onKeyEntered(String key, GeoLocation location) {                 
                                if (!DriverFound) {
                                    FirebaseDatabase db = FirebaseDatabase.getInstance();
                                    DatabaseReference tokens = db.getReference();

                                    Token token = new Token(FirebaseInstanceId.getInstance().getToken());
                                    tokens.child("TokensC").child(key).child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                                            .setValue(token);
                                    keyp= key;
                                    DriverFound = true;

                                }
                            }

                            @Override
                            public void onKeyExited(String key) {
                                DriverFound = false;
                                DatabaseReference PaasajeroFinded = FirebaseDatabase.getInstance().getReference().child("TokensC").child(key).child(FirebaseAuth.getInstance().getCurrentUser().getUid());
                                PaasajeroFinded.removeValue();

                            }

                            @Override
                            public void onKeyMoved(String key, GeoLocation location) {

                            }

                            @Override
                            public void onGeoQueryReady() {
                                if (!DriverFound && radius < LIMIT) {

                                    geoQuery.removeAllListeners();

                                    if (keyp != null)
                                    {
                                        DatabaseReference PaasajeroFinded = FirebaseDatabase.getInstance().getReference().child("TokensC").child(macumba).child(FirebaseAuth.getInstance().getCurrentUser().getUid());
                                        PaasajeroFinded.removeValue();

                                    }
                                }

                            }

                            @Override
                            public void onGeoQueryError(DatabaseError error) {

                            }
                        });
...