Android - Завершить запрос через время / максимальный радиус - PullRequest
0 голосов
/ 11 апреля 2020

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

То, что я пытался реализовать в методе onGeoQueryReady, было, если радиус <= 5 findClosestTradesman еще endRequest (), но, похоже, он не работал. </p>

Я надеялся, что кто-нибудь увидит, как я могу завершить запрос после определенного времени поиска или, если достигнут максимальный радиус, завершить запрос.

 private void getClosestTradesman() {
    DatabaseReference tradesmanLocation = FirebaseDatabase.getInstance().getReference().child("TradesmanAvailable");

    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) {
                radius++;
                getClosestTradesman();
            }
            //else{
              //  endRequest();
                //Toast.makeText(getApplicationContext(), "No Tradesman Found.", Toast.LENGTH_LONG).show();


        }

        @Override
        public void onGeoQueryError(DatabaseError error) {

        }
    });
}

Как вы можете видеть, он в настоящее время увеличивает радиус, поэтому я подумал, может быть, если он достигнет максимального радиуса, например, 10 миль, он прекратит поиск и завершит запрос (endRequest () отменит запрос).

...