Android - 显示折线

时间:2017-10-24 12:51:19

标签: java android google-maps

我的应用程序的概念是,每次用户在地图上设置两个标记并且该路径显示在另一个活动中时,将绘制一条路径。我已经将路径(航路点)保存为我的FireBase数据库中的数组列表,并且我还检索了第二个活动中的路点,但是我在第二个活动中显示多边形线时遇到问题。我的数据库:

enter image description here

我的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;

1 个答案:

答案 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
}