我的应用程序的概念是,每次用户在地图上设置两个标记并且该路径显示在另一个活动中时,将绘制一条路径。我已经将路径(航路点)保存为我的FireBase数据库中的数组列表,并且我还检索了第二个活动中的路点,但是我在第二个活动中显示多边形线时遇到问题。我的数据库:
我的POJO课程:
public static class Route {
private ArrayList<Location> locations;
public Route() {
}
@PropertyName("route")
public ArrayList<Location> getLocations() {
return locations;
}
@PropertyName("route")
public void setLocations(ArrayList<Location> locations) {
this.locations = locations;
}
}
public static class Location {
private Double latitude;
private Double longitude;
public Location() {
}
public Double getLatitude() {
return latitude;
}
public void setLatitude(Double latitude) {
this.latitude = latitude;
}
public Double getLongitude() {
return longitude;
}
public void setLongitude(Double longitude) {
this.longitude = longitude;
}
}
检索航点:
userRef.child("Route").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Route route = dataSnapshot.getValue(Route.class);
for (Location location : route.getLocations()) {
points = new ArrayList();
double lat = location.getLatitude();
double lng = location.getLongitude();
position = new LatLng(lat, lng);
points.add(position);
}
}
要将折线添加到地图,请执行以下操作:
PolylineOptions lineOptions = null;
lineOptions.add(position);
lineOptions.width(12);
lineOptions.color(Color.RED);
mMap.addPolyline(lineOptions);
但我得到了这个例外:
&#34; NullPointerException:尝试调用虚拟方法com.google.android.gms.maps.model.PolylineOptions com.google.android.gms.maps.model.PolylineOptions.add(com.google .android.gms.maps.model.LatLng)&#39;在null对象引用&#34;
答案 0 :(得分:3)
写作怎么样
PolylineOptions lineOptions = new PolylineOptions();
而不是
PolylineOptions lineOptions = null;
您还要在折线中添加单个点。循环浏览列表points
并添加所有列表。
for (LatLng point: points){
lineOptions.add(point);
}
mMap.addPolyline(lineOptions);
你的另一个错误:
您正在for循环中重新创建ArrayList为points = new ArrayList();
。在循环之前使用它。
points = new ArrayList();
for (Location location : route.getLocations()) {
//your code
}