Android - 发布未知的imageData参考

时间:2015-12-16 18:44:38

标签: android google-maps picasso

我确切地知道为什么我会收到此错误,但我无法弄清楚如何修复它。所以我正在做的是使用毕加索绘制一堆标记,我实现了一个目标,并在图像完成下载后加载标记图标。但是,用户可以单击清除地图视图的选项卡。所以为了尝试修复它,我不使用getMap.clear()而是跟踪hashmap中的标记,当地图清除时,我循环遍历hashmap并从地图中删除标记并清除hashmap,但是我仍然遇到这个问题。

以下是删除标记的功能:

private void clearCars() throws IllegalArgumentException {

    Iterator it = vehicles.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry pair = (Map.Entry) it.next();
        Car aCar = (Car) pair.getValue();

        if (aCar.getCurrentMarker() != null) {
            if (aCar.getCurrentMarker().getmMarker() != null) {
                aCar.getCurrentMarker().getmMarker().remove();
            }
        }
    }

    vehicles.clear();
}

此方法绘制汽车:

private void validateMap(ArrayList<Object> data) {

    if (Theme.isCarTheme()) {

        for (Object anObject : data) {

            Car currentCar = (Car) anObject;

            String uniqueIndex = currentCar.getCarID() + "-" + currentCar.getVehicleNumber();

            CustomMarker aMarker = null;

            if (vehicles.containsKey(uniqueIndex)) {

                aMarker = ((Car) vehicles.get(uniqueIndex)).getCurrentMarker();
                aMarker.getmMarker().setPosition(currentCar.getCarLocation());

            } else {

                MarkerOptions options = new MarkerOptions();
                options.icon(BitmapDescriptorFactory.fromResource(R.drawable.blank_image));
                options.position(currentCar.getCarLocation());
                currentCar.setCurrentMarker(new CustomMarker(mapViewLayout.getMapView().getMap().addMarker(options)));

                String strUrl = Constants.Car_IMAGE_URL + currentCar.getCarID() + assetType + ".png";

                Picasso.with(getActivity()).load(strUrl).into(currentCar.getCurrentMarker());

                vehicles.put(uniqueIndex, currentCar);
            }

            vehicles.get(uniqueIndex).setHasUpdated(true);
        }

        Iterator it2 = vehicles.entrySet().iterator();
        while (it2.hasNext()) {
            Map.Entry pair = (Map.Entry) it2.next();

            Car aCar = (Car) pair.getValue();

            if (aCar.isHasUpdated() == false) {
                it2.remove();
                aCar.getCurrentMarker().getmMarker().remove();
            }
        }
    }

}

这是标记类:

public class CustomMarker implements Target {

    Marker mMarker;

    public CustomMarker(Marker marker) {
        mMarker = marker;
    }

    @Override
    public int hashCode() {
        return mMarker.hashCode();
    }

    @Override
    public boolean equals(Object o) {
        if(o instanceof CustomMarker) {
            Marker marker = ((CustomMarker) o).mMarker;
            return mMarker.equals(marker);
        } else {
            return false;
        }
    }

    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from)  throws IllegalArgumentException {

        mMarker.setIcon(BitmapDescriptorFactory.fromBitmap(bitmap));

    }

    @Override
    public void onBitmapFailed(Drawable errorDrawable) {
    }

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {

    }


    public Marker getmMarker() {
        return mMarker;
    }
}

0 个答案:

没有答案
相关问题