[英]Google Maps Marker Clustering?
我正在嘗試添加從Firebase數據庫獲得的標記的聚類。 但是啟動地圖時,我的應用程序使錯誤崩潰:
java.lang.NullPointerException:嘗試從null對象引用上的字段“ double com.google.android.gms.maps.model.LatLng.longitude”讀取
這是我的MapActivity.java
public class MapActivity extends AppCompatActivity
implements OnMapReadyCallback {
private static final int DEFAULT_ZOOM = 15;
private static final String TAG = MapActivity.class.getSimpleName();
private LocationManager locationManager;
private GoogleMap mMap;
private ClusterManager<Marker> mClusterManager;
private static final String EXTRA_MARKER_LIST = "EXTRA_MARKER_LIST";
public static Intent getStartIntent(Context context, List<Marker> markerList) {
Intent startIntent = new Intent(context, MapActivity.class);
startIntent.putParcelableArrayListExtra(
EXTRA_MARKER_LIST, new ArrayList<Marker>(markerList));
return startIntent;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map_raw);
SupportMapFragment mapFragment =
(SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(final GoogleMap googleMap) {
mMap = googleMap;
LatLng lviv = new LatLng(49.838, 24.029);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(lviv, 12));
mClusterManager = new ClusterManager<Marker>(this, googleMap);
googleMap.setOnCameraIdleListener(mClusterManager);
googleMap.setOnMarkerClickListener(mClusterManager);
addMarkers();
}
private void addMarkers() {
List<Marker> markerList=getIntent().getParcelableArrayListExtra(EXTRA_MARKER_LIST);
for(int i = 0; i < markerList.size(); i++) {
Marker marker = markerList.get(i);
Location location = marker.getLocation();
mMap.addMarker(new MarkerOptions()
.position(new LatLng(location.getLatitude(), location.getLongitude()))
.title(marker.getName()));
mClusterManager.addItem( marker);
}
}
}
這是我的模型類Marker.java
public class Marker implements Parcelable, ClusterItem {
public String id;
public String name;
public String description;
public String date;
public Image image;
public Location location;
public Marker() {
}
protected Marker(Parcel in) {
id = in.readString();
name = in.readString();
description = in.readString();
date = in.readString();
image = in.readParcelable(Image.class.getClassLoader());
location = in.readParcelable(Location.class.getClassLoader());
}
public static final Creator<Marker> CREATOR = new Creator<Marker>() {
@Override
public Marker createFromParcel(Parcel in) {return new Marker(in);}
@Override
public Marker[] newArray(int size) {return new Marker[size];}
};
public String getDescription() {return description;}
public String getId() {return id;}
public String getDate(){return date;}
public Image getImage() {return image;}
public Location getLocation() {return location;}
public String getName() {return name;}
@Override
public String toString() {
return "Marker{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", description='" + description + '\'' +
", date='" + date + '\'' +
", image=" + image +
", location=" + location + '}';
}
@Override
public int describeContents() {return 0;}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(id);
parcel.writeString(name);
parcel.writeString(description);
parcel.writeString(date);
parcel.writeParcelable(image, i);
parcel.writeParcelable(location, i);
}
@Override
public LatLng getPosition() {return null;}
@Override
public String getTitle() {return null;}
@Override
public String getSnippet() {return null;}
}
非常感謝您的關注。 希望有人能幫助我
您必須在Marker
類(屬於ClusterItem
接口的實現)中正確實現getPosition
。 當前,您的Marker類為getPosition
返回null。
所以改變這個:
@Override
public LatLng getPosition() {return null;}
像這樣:
@Override
public LatLng getPosition() {
return new LatLng(location.getLatitude(),location.getLongitude());
}
為此,請考慮實現其他接口方法getTitle
和getSnippet
。
這些接口方法是ClusterManager從自定義類型參數中檢索信息的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.