Android 谷歌地图API崩溃

Android 谷歌地图API崩溃,android,google-maps,nullpointerexception,itemizedoverlay,Android,Google Maps,Nullpointerexception,Itemizedoverlay,我正在我的应用程序上使用谷歌地图API的第1版,上面有一个自定义重叠。问题是,在很多情况下,我都会在应用程序上遇到崩溃和强制关机,我很确定这是由地图造成的。我检查了线程,发现我需要使用populate()函数 问题是我不确定在哪里使用它,因为代码不是我最初编写的:( 这是我的逐项覆盖类,它引起了麻烦 public class AdvrItemizedOverlay extends ItemizedOverlay<MapOverlayItem> { protected Vector&

我正在我的应用程序上使用谷歌地图API的第1版,上面有一个自定义重叠。问题是,在很多情况下,我都会在应用程序上遇到崩溃和强制关机,我很确定这是由地图造成的。我检查了线程,发现我需要使用populate()函数

问题是我不确定在哪里使用它,因为代码不是我最初编写的:(

这是我的逐项覆盖类,它引起了麻烦

public class AdvrItemizedOverlay extends ItemizedOverlay<MapOverlayItem> {

protected Vector<AdvrMapItem> mOverlayItems = new Vector<AdvrMapItem>();

protected Bitmap mEmptyMarker = null;

protected Resources mResources = null;

protected Rect mDstRect = new Rect(6, 6, 66, 66);

public AdvrItemizedOverlay(Resources res) {
    super(boundCenterBottom(res.getDrawable(R.drawable.bg_map_mark_adver)));
    mEmptyMarker = BitmapFactory.decodeResource(res, R.drawable.bg_map_mark_adver);
    float density = (float)mEmptyMarker.getWidth() / 72.0f;
    mDstRect.left *= density;
    mDstRect.top *= density;
    mDstRect.right *= density;
    mDstRect.bottom *= density;
    mResources = res;
    performPopulated();
}

@Override
protected MapOverlayItem createItem(int i) {
    AdvrMapItem advrItem = mOverlayItems.get(i);
    MapOverlayItem overlayItem = advrItem.overlayItem();
    Drawable marker = advrItem.mapMarker(mResources, mEmptyMarker, mDstRect);
    if (marker != null)
        overlayItem.setMarker(boundCenterBottom(marker));
    return overlayItem;

}

@Override
public int size() {
    return mOverlayItems.size();
}

public void add(AdvrMapItem userItem) {
    mOverlayItems.add(userItem);
    populate();
}

public void remove(AdvrMapItem item) {
    mOverlayItems.remove(item);
    setLastFocusedIndex(-1);
    populate();
}

public void clear() {
    mOverlayItems.removeAllElements();
    setLastFocusedIndex(-1);
    populate();
}

public void performPopulated() { populate(); }
公共类AdvritizedOverlay扩展了ItemizedOverlay{
受保护向量mOverlayItems=新向量();
受保护位图mEmptyMarker=null;
受保护资源mResources=null;
受保护的Rect mDstRect=新的Rect(6,6,66,66);
公众咨询覆盖(资源){
super(boundCenterBottom(res.getDrawable(R.drawable.bg\u map\u mark\u adver));
mEmptyMarker=BitmapFactory.decodeResource(res,R.drawable.bg\u map\u mark\u adver);
浮点密度=(float)mEmptyMarker.getWidth()/72.0f;
mDstRect.left*=密度;
mDstRect.top*=密度;
mDstRect.right*=密度;
mDstRect.bottom*=密度;
mResources=res;
performPopulated();
}
@凌驾
受保护的MapOverlayItem createItem(int i){
advrapitem advrItem=mOverlayItems.get(i);
MapOverlayItem overlayItem=advrItem.overlayItem();
可绘制标记=advrItem.mapMarker(mResources、mEmptyMarker、mDstRect);
如果(标记!=null)
overlayItem.setMarker(boundCenterBottom(marker));
返回覆盖项;
}
@凌驾
公共整数大小(){
返回mOverlayItems.size();
}
公共void添加(advrapitem userItem){
添加(userItem);
填充();
}
公共作废删除(AdvrMapItem项目){
mOverlayItems。删除(项目);
setLastFocusedIndex(-1);
填充();
}
公共空间清除(){
mOverlayItems.removalelements();
setLastFocusedIndex(-1);
填充();
}
public void performPopulated(){populate();}
}


我不确定构造函数是什么时候调用的,在哪里放置填充方法。感谢所有

< P>你在某个时候传递了一个空标记。你需要知道在哪里。你可能还想考虑更新——不仅仅是API在版本2中更简单,而且它们不再发布新的V1 API密钥//p>
public class AdvrItemizedOverlay extends ItemizedOverlay<MapOverlayItem> {

protected Vector<AdvrMapItem> mOverlayItems = new Vector<AdvrMapItem>();

protected Bitmap mEmptyMarker = null;

protected Resources mResources = null;

protected Rect mDstRect = new Rect(6, 6, 66, 66);

public AdvrItemizedOverlay(Resources res) {
    super(boundCenterBottom(res.getDrawable(R.drawable.bg_map_mark_adver)));
    mEmptyMarker = BitmapFactory.decodeResource(res, R.drawable.bg_map_mark_adver);
    float density = (float)mEmptyMarker.getWidth() / 72.0f;
    mDstRect.left *= density;
    mDstRect.top *= density;
    mDstRect.right *= density;
    mDstRect.bottom *= density;
    mResources = res;
    performPopulated();
}

@Override
protected MapOverlayItem createItem(int i) {
    AdvrMapItem advrItem = mOverlayItems.get(i);
    MapOverlayItem overlayItem = advrItem.overlayItem();
    Drawable marker = advrItem.mapMarker(mResources, mEmptyMarker, mDstRect);
    if (marker != null)
        overlayItem.setMarker(boundCenterBottom(marker));
    return overlayItem;

}

@Override
public int size() {
    return mOverlayItems.size();
}

public void add(AdvrMapItem userItem) {
    mOverlayItems.add(userItem);
    populate();
}

public void remove(AdvrMapItem item) {
    mOverlayItems.remove(item);
    setLastFocusedIndex(-1);
    populate();
}

public void clear() {
    mOverlayItems.removeAllElements();
    setLastFocusedIndex(-1);
    populate();
}

public void performPopulated() { populate(); }