【问题标题】:Cannot remove marker on Google Map (Java)无法删除谷歌地图上的标记(Java)
【发布时间】:2021-08-05 09:43:32
【问题描述】:

我有一个应用程序,它将使用来自实时 Firebase 的最新纬度和经度更新谷歌地图标记。我在删除谷歌地图上的标记时遇到问题,问题是当地图上出现新标记时,无法删除以前的标记。我尝试使用GoogleMap.clear(),但它似乎不起作用。有谁知道是什么导致了这个问题?谢谢!

我的代码


public class PoliceMapActivity extends FragmentActivity implements OnMapReadyCallback {

    //initialize all variables
    DatabaseReference reff;
    GoogleMap map;
    String RecordId;
    Marker marker;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_police_map);
        SupportMapFragment supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.police_map);
        supportMapFragment.getMapAsync(PoliceMapActivity.this);
        //get record Id
        RecordId = getIntent().getStringExtra("recordId");
        reff = FirebaseDatabase.getInstance().getReference().child("Records");




        Thread thread = new Thread() {
            @Override
            public void run() {
                try {
                    while (isInterrupted()) {
                        Thread.sleep(1000);
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                // update onmapready()
                                if (supportMapFragment != null) {
                                    supportMapFragment.getMapAsync(PoliceMapActivity.this);
                                    if (marker != null) {
                                        map.clear();
                                    }
                                }
                            }
                        });
                    }
                } catch (InterruptedException e) {
                }
            }
        };
        thread.start();

    }


    @Override
    public void onMapReady(GoogleMap googleMap) {
        map.clear();

        final DatabaseReference finalreff = reff.child(RecordId);
        finalreff.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                    
                Double lat = (Double) snapshot.child("latitude").getValue();
                Double lon = (Double) snapshot.child("longitude").getValue();
                String name = snapshot.child("Fullname").getValue().toString();
                LatLng latLng = new LatLng(lat, lon);
                googleMap.addMarker(new MarkerOptions().position(latLng).title(getIntent().getStringExtra(name)));
                googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 18));


            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });



    }
}

【问题讨论】:

    标签: java android-studio google-maps


    【解决方案1】:

    您可能在不同的对象上调用了 map.clear(),而不是在代码中显示的 googleMap 实例上。 尝试在 onDataChange 方法中调用 googleMap.clear()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      • 2012-10-17
      • 1970-01-01
      • 2011-01-28
      • 2018-10-13
      • 1970-01-01
      相关资源
      最近更新 更多