GeoQuery работает в Firebase, но не Front-End - PullRequest
0 голосов
/ 04 мая 2020

Так что я уже давно борюсь с этой проблемой, и это беспокоит меня. Я опубликовал неделю go и получил отличный ответ, который я понял и реализовал. Однако конечная цель только несколько работает. Он удаляет запрос клиента из Firebase, как и должно ... но не меняет ничего на экране, что я хочу. Я думал только о том, что я не размещаю код в правильном месте или что проблема связана с компонентами внешнего интерфейса.

private void getClosestTradesman() {

    if (!tradesmanFound && radius >= 10) {

        requestBol = false;
        tradesmanFound = false;
        radius = 1;
        String userID = FirebaseAuth.getInstance().getCurrentUser().getUid();

        DatabaseReference ref = FirebaseDatabase.getInstance().getReference("CustomerRequest");
        GeoFire geoFire = new GeoFire(ref);
        geoFire.removeLocation(userID, new GeoFire.CompletionListener() {
            @Override
            public void onComplete(String key, DatabaseError error) {

            }
        });
            Intent intent = new Intent(CustomerMapActivity.this, CustomerMapActivity.class);
            startActivity(intent);
            finish();
            return;

    }

    final DatabaseReference tradesmanLocation = FirebaseDatabase.getInstance().getReference().child("TradesmanAvailable");

    final GeoFire geoFire = new GeoFire(tradesmanLocation);
    geoQuery = geoFire.queryAtLocation(new GeoLocation(customerLocation.latitude, customerLocation.longitude), radius);
    geoQuery.removeAllListeners();

    geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
        @Override
        public void onKeyEntered(String key, GeoLocation location) {
            if (!tradesmanFound && requestBol) {
                DatabaseReference customerDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child("Tradesman").child(key);
                customerDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        if (dataSnapshot.exists() && dataSnapshot.getChildrenCount() > 0) {
                            Map<String, Object> tradesmanMap = (Map<String, Object>) dataSnapshot.getValue();
                            if (tradesmanFound) {
                                return;
                            }

                            if (tradesmanMap.get("Trade").equals(tradeType)) {
                                tradesmanFound = true;
                                tradesmanFoundID = dataSnapshot.getKey();

                                DatabaseReference tradesmanRef = FirebaseDatabase.getInstance().getReference().child("Users").child("Tradesman").child(tradesmanFoundID).child("CustomerRequest");
                                String customerID = FirebaseAuth.getInstance().getCurrentUser().getUid();
                                HashMap map = new HashMap();
                                map.put("CustomerRequestID", customerID);
                                tradesmanRef.updateChildren(map);

                                getTradesmanLocation();
                                getTradesmanInfo();
                                isRequestFinished();
                                requestTradesmanBtn.setText("Looking for Tradesman's Location...");
                            }
                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                    }
                });
            }


        }

        @Override
        public void onKeyExited(String key) {

        }

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

        }


        @Override
        public void onGeoQueryReady() {
            if (!tradesmanFound) {

                geoQuery.removeAllListeners();

                radius++;
                getClosestTradesman();


            }


        }

Итак, изначально у меня была первая часть кода в разделе onGeoQueryReady как Итак:

@Override
        public void onGeoQueryReady() {
            if (!tradesmanFound && radius < 10) {

                geoQuery.removeAllListeners();

                radius++;
                getClosestTradesman();


            }  else {
               endRequest();

endRequest в основном удаляет запрос из firebase и меняет кнопки, такие как: удаление одного, изменение текста на другой и добавление нового.

Так что мне нужна помощь, почему она работает в бэкэнде, но ни один из компонентов интерфейса не меняется. Вот почему мне пришлось добавить вначале, чтобы он перезапустил действие, так как это был единственный способ ... даже тост не появится на экране, поэтому я озадачен тем, что решение.

Спасибо

...