我有这个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作为我的数据库。
答案 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;
}
});
希望这可以帮助有同样问题的人。