Запрос Firebase внутри onMarkerClick не работает должным образом - PullRequest
0 голосов
/ 03 октября 2019

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

Проблема в том, что когда я нажимаю на любой маркер в первый раз, а затем, если я нажимаю на любой другой маркер, открытое действие открывает подробности о маркере, который был нажат первым.

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

Что можно сделать, чтобы сделать правильный запрос внутри onMarkerClick.

Вот код.

 @Override
    public boolean onMarkerClick(Marker marker) {

        eventTitle = marker.getTitle();

        q = database.getReference("events")
                .orderByChild("event_title")
                .equalTo(marker.getTitle());

        q.addValueEventListener(vel);

        Intent intent = new Intent(NearbyEventsActivity.this, EventDetailActivity.class);
        Bundle bundle = new Bundle();
        bundle.putString("eventid", eventid);
        intent.putExtras(bundle);
        if (eventid != null) {
            startActivity(intent);
        }

        return false;
    }

    ValueEventListener vel = new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                Event e = snapshot.getValue(Event.class);
                eventid = e.getEvent_id();
            }
        }

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

1 Ответ

0 голосов
/ 03 октября 2019

Проблема в том, что когда я нажимаю на любой маркер в первый раз, а затем, если я нажимаю на любой другой маркер, открытое действие открывает детали маркера, который был нажат первым.

Запрос Firebase выполняется асинхронно. Ваш ValueEventListener не будет вызван немедленно.

Используйте свой второй стартовый код внутри метода onDataChange.

    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
            Event e = snapshot.getValue(Event.class);
            eventid = e.getEvent_id();
        }

        Intent intent = new Intent(NearbyEventsActivity.this, EventDetailActivity.class);
        Bundle bundle = new Bundle();
        bundle.putString("eventid", eventid);
        intent.putExtras(bundle);
        if (eventid != null) {
         startActivity(intent);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...