NullPointerException при использовании наложений на карте
Поэтому я следую точным инструкциям, приведенным в http://developer.android.com/resources/tutorials/views/hello-mapview.html
Проблема, когда я нажимаю на оверлей, он принудительно закрывается, и logcat показывает
04-21 14:17:46.188: ERROR/AndroidRuntime(1632): java.lang.NullPointerException
04-21 14:17:46.188: ERROR/AndroidRuntime(1632): at com.android.internal.app.AlertController$AlertParams.<init>(AlertController.java:753)
04-21 14:17:46.188: ERROR/AndroidRuntime(1632): at android.app.AlertDialog$Builder.<init>(AlertDialog.java:273)
04-21 14:17:46.188: ERROR/AndroidRuntime(1632): at achint.major.MapItemizedOverlays.onTap(MapItemizedOverlays.java:34)
04-21 14:17:46.188: ERROR/AndroidRuntime(1632): at com.google.android.maps.ItemizedOverlay.onTap(ItemizedOverlay.java:453)
04-21 14:17:46.188: ERROR/AndroidRuntime(1632): at com.google.android.maps.OverlayBundle.onTap(OverlayBundle.java:83)
04-21 14:17:46.188: ERROR/AndroidRuntime(1632): at com.google.android.maps.MapView$1.onSingleTapUp(MapView.java:346)
04-21 14:17:46.188: ERROR/AndroidRuntime(1632): at android.view.GestureDetector.onTouchEvent(GestureDetector.java:506)
04-21 14:17:46.188: ERROR/AndroidRuntime(1632): at com.google.android.maps.MapView.onTouchEvent(MapView.java:628)
04-21 14:17:46.188: ERROR/AndroidRuntime(1632): at android.view.View.dispatchTouchEvent(View.java:3709)
04-21 14:17:46.188: ERROR/AndroidRuntime(1632): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:852)
и так далее. Почему именно это происходит? Я изменил AlertDialog внутри метода onTap на тост smiple, показывающий какое-то сообщение, но он все еще дает проблему?
Изменить: Извините, вот код
public class MapItemizedOverlays extends ItemizedOverlay {
private ArrayList<OverlayItem> mOverlays= new ArrayList<OverlayItem>();
Context mContext;
public MapItemizedOverlays(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
// TODO Auto-generated constructor stub
}
public MapItemizedOverlays(Drawable defaultmarker, Context context){
super(defaultmarker);
mContext = context;
//populate();
}
@Override
protected boolean onTap(int index){
/*OverlayItem item = mOverlays.get(index);
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
dialog.setTitle("Test");
dialog.setMessage("Test");
dialog.show();*/
Toast.makeText(mContext, "The int caused te problem", Toast.LENGTH_SHORT).show();
return true;
}
public void addOverlays(OverlayItem overlay){
mOverlays.add(overlay);
populate();
}
@Override
protected OverlayItem createItem(int i) {
// TODO Auto-generated method stub
return mOverlays.get(i);
}
@Override
public int size() {
// TODO Auto-generated method stub
return mOverlays.size();
}
}
Вот действие карты, которое использует наложения:
открытый класс MapDisplay расширяет MapActivity{
private String idValue;
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
@Override
protected void onCreate(Bundle icicle){
super.onCreate(icicle);
setContentView(R.layout.mapview);
MapView mapview = (MapView)findViewById(R.id.mapview);
mapview.setBuiltInZoomControls(true);
idValue = getIntent().getStringExtra("idValue");
List<Overlay> mapOverlays = mapview.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker);
MapItemizedOverlays itemizedOverlays = new MapItemizedOverlays(drawable);
GeoPoint point = new GeoPoint(19240000,-99120000);
OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!");
itemizedOverlays.addOverlays(overlayitem);
mapOverlays.add(itemizedOverlays);
Toast.makeText(getBaseContext(), idValue, Toast.LENGTH_SHORT).show();
}