为了账号安全,请及时绑定邮箱和手机立即绑定

onMarkerClick 内的 Firebase 查询无法正常工作

onMarkerClick 内的 Firebase 查询无法正常工作

吃鸡游戏 2023-09-20 16:36:11
我有一个活动,其中我从 Firebase 数据库获取数据并在地图上显示多个标记。在 onMarkerClick 中,我希望用户转到另一个活动,其中包含有关所点击的标记的详细信息。第一次点击标记时,它仅显示标题,第二次点击时,它会在执行 Firebase 数据库查询以获取该标记的 ID 后转到其他活动,以便提供有关点击的标记的正确详细信息。问题是,当我第一次点击任何标记时,然后如果我点击任何其他标记,打开的活动将打开首先点击的标记的详细信息。如果我点击同一个标记两次,效果就很好。但是,当我回到地图活动时,第一次点击任何标记,将打开之前点击的标记的详细信息。可以做什么来在 onMarkerClick 内执行正确的查询。这是代码。
查看完整描述

2 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

 @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) {

        }

    };


查看完整回答
反对 回复 2023-09-20
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

问题是,当我第一次点击任何标记时,然后如果我点击任何其他标记,打开的活动将打开首先点击的标记的详细信息。

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);

        }

    }


查看完整回答
反对 回复 2023-09-20
  • 2 回答
  • 0 关注
  • 52 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信