Показывать индикатор выполнения, пока Geofire не будет готов - PullRequest
0 голосов
/ 13 июля 2020

Я создал приложение, которое использует GeoFire для поиска других пользователей в пределах определенного радиуса.

Когда в пределах этого радиуса есть другие пользователи, я добавляю их в RecyclerView.

В это время я продолжаю показывать ProgressBar.

Все работает хорошо, пока вокруг действительно есть люди.

В случае, если вокруг нет людей, ProgressBar продолжает отображаться.

Код, который я использую (в упрощенной форме):

private void FindCloseUsers(Double Lat, Double Lon, Double Radius){

    List<DiscoverUsers> Users = new ArrayList<>();

    GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(Lat, Lon), Radius);
    geoQuery.addGeoQueryEventListener( new GeoQueryEventListener() {
        @Override
        public void onKeyEntered(String key, GeoLocation location) {

            if (!key.equals( auth.getUid() )) {
                db.collection( "Users" ).document( key ).collection( "MyUsers" ).get().addOnCompleteListener( task_count -> {
                    if (task_count.isSuccessful()) {
                        for (DocumentSnapshot document_near : task_count.getResult()) {
                            Users.add( new DiscoverUsers( document_near.getString( "UserID" ) ) );
                        }
                    }

                    discoverUserAdapter = new DiscoverUserAdapter( Users, listener );
                    rv_NearMeUsers.setAdapter( discoverUserAdapter );

                    rv_NearMeUsers.getViewTreeObserver()
                        .addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() {
                            @Override
                            public void onGlobalLayout() {
                                rv_NearMeUsers.getViewTreeObserver().removeOnGlobalLayoutListener( this );
                                Flag = true;
                            }
                        } );

                } );
            }

        }

        @Override
        public void onKeyExited(String key) {

        }

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

        }

        @Override
        public void onGeoQueryReady() {
            if (Flag) {
                pb_Discover.setVisibility( View.GONE );
            }
        }

        @Override
        public void onGeoQueryError(DatabaseError error) {

        }
    } );
}

Мой вопрос в том, как я могу также сделать ProgressBar невидимым, если вокруг нет людей меня? Насколько я понимаю, onGeoQueryReady вызывается только тогда, когда рядом был пользователь. Например, как узнать, что результат нулевой или около того.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...