Android - 如何从外部OnMapReady函数获取经度和纬度值?

时间:2016-10-21 17:31:09

标签: android google-maps firebase google-maps-markers

我有这个EventActivity,我有一个带标记的地图:

public class EventActivity extends AppCompatActivity implements OnMapReadyCallback {

private double latitude;
private double longitude;
private GoogleMap eventMap;

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event);

        // Declares map fragment.
        SupportMapFragment eventMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.activity_event_map);
        eventMapFragment.getMapAsync(this);

        // Gets latitude and longitude values from database.

            // (things happen here and I get the values correctly)

            latitude = 12.4567785
            longitude = 25.7773665
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        eventMap = googleMap;

        // Sets map position.
        LatLng position = new LatLng(latitude, longitude);
        eventMap.addMarker(new MarkerOptions().position(position));
        eventMap.moveCamera(CameraUpdateFactory.newLatLng(position));
    }

}
  • OnCreate()上,我得到了一对双值正确。我甚至可以举杯祝酒,并向他们展示。

  • 问题是,当我想在 OnMapReady()上将它们设置为我的地图标记的位置时,它什么都没有或 null

如何正确地将值从OnCreate()传递给OnMapReady()?

编辑:我正在使用Firebase作为我的数据库。

2 个答案:

答案 0 :(得分:3)

也许在分配纬度/经度值之后初始化地图片段:

public class EventActivity extends AppCompatActivity implements   OnMapReadyCallback {

private double latitude;
private double longitude;
private GoogleMap eventMap;

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_event);

    // Gets latitude and longitude values from database.

        // (things happen here and I get the values correctly)

        latitude = 12.4567785
        longitude = 25.7773665

    // Declares map fragment.
    SupportMapFragment eventMapFragment = (SupportMapFragment)  getSupportFragmentManager().findFragmentById(R.id.activity_event_map);
    eventMapFragment.getMapAsync(this);

}

@Override
public void onMapReady(GoogleMap googleMap) {
    eventMap = googleMap;

    // Sets map position.
    LatLng position = new LatLng(latitude, longitude);
    eventMap.addMarker(new MarkerOptions().position(position));
    eventMap.moveCamera(CameraUpdateFactory.newLatLng(position));
}

}

答案 1 :(得分:0)

我需要解决类似的问题,目前在我的应用中使用此解决方案。我想从我的位置向相关标记添加新的折线,因此希望setOnMarkerListener可以访问我的位置。以下是我解决它的方法:

第1步。 我创建了两个全局双打如下:

private Double myLatitude = -33.865143;
private Double myLongitude = 151.209900;

我为他们提供了一个默认值Sydney,以避免任何NullPointerException错误,因为我正在为折线数组添加折线。  第2步。 在我的onLocationChanged方法中,我更新了值:

 @Override
public void onLocationChanged(Location location) {
    myLatitude = location.getLatitude();
    myLongitude = location.getLongitude();
....

现在在第3步中我想创建一个从mylocation到所选标记的新行,因此使用了以下代码:

 mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                marker.showInfoWindow();
                areaText.setText(marker.getTitle());
                distanceText.setText("0 Meters");
                markerLatitude = marker.getPosition().latitude;
                markerLongitude = marker.getPosition().longitude;

                lines.add(mMap.addPolyline(new PolylineOptions()
                        .add(new LatLng(myLatitude, myLongitude),
                                new LatLng(marker.getPosition().latitude, marker.getPosition().longitude))
                        .width(10)
                        .color(Color.RED)));
                if (lines.size() > 1)
                    lines.remove((lines.size()-1));
                return true;
            }


        });

希望这可以帮助有同样问题的人。