作者:手机用户2602898385 | 来源:互联网 | 2023-09-05 17:59
我一直在关注这个教程:http://developer.android.com/resources/tutorials/views/hello-mapview.html但在onTap
我一直在关注这个教程:http://developer.android.com/resources/tutorials/views/hello-mapview.html
但在onTap mContext中抛出一个NullPointerException ..有谁知道为什么?这是我的代码..
public class Mapitems extends ItemizedOverlay{
Context mContext;
private ArrayList mOverlays = new ArrayList();
public Mapitems(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
}
public Mapitems(Drawable defaultMarker, Context context) {
super(defaultMarker);
mCOntext= context;
}
@Override
protected OverlayItem createItem(int i) {
return mOverlays.get(i);
}
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}
@Override
protected boolean onTap(int index) {
OverlayItem item = mOverlays.get(index);
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.show();
return true;
}
@Override
public int size() {
return mOverlays.size();
}
}
//编辑:我仍然遇到这个问题. Bounty适合任何能够解释为什么我会遇到这种错误的人,以及我该如何纠正呢?
// edit2:似乎过去的答案允许我点击该项目,但没有在mapview中显示其图标..任何人都知道为什么?
解决方法:
查看代码,您可能会调用简单的构造函数
public Mapitems(Drawable defaultMarker)
此构造函数不设置mContext,这就是您获得NullPointerException的原因.
添加像mCOntext= new Context()或mCOntext= android.content.getApplicationContext()这样的行可能会解决问题.
也可以将null参数提供给其他构造函数
public Mapitems(Drawable defaultMarker, Context context)
在分配mContext时插入空检查,并在必要时提供默认上下文可以解决问题.
构造函数看起来像这样:
public Mapitems(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
mCOntext= android.content.getApplicationContext();
// or: mCOntext= new Context();
}
public Mapitems(Drawable defaultMarker, Context context) {
super(defaultMarker);
if(cOntext==null)
mCOntext= android.content.getApplicationContext();
// or: mCOntext= new Context();
mCOntext= context;
}
希望这能解决你的问题.