NullPointerException dalam menggunakan overlay pada peta

Jadi saya mengikuti instruksi persis seperti yang diberikan di http://developer.android.com/resources/tutorials/views/hello-mapview.html

Masalahnya, ketika saya mengklik overlay, itu ditutup paksa, dan logcat muncul

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)

dan seterusnya. Mengapa hal ini sebenarnya terjadi? Saya mengubah AlertDialog di dalam metode onTap menjadi smiple Toast yang menampilkan beberapa pesan, tetapi masih menimbulkan masalah?

Sunting: Maaf, ini kodenya

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();
}

}

Berikut aktivitas peta yang menggunakan overlay:

MapDisplay kelas publik memperluas 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();
}

person Achint    schedule 21.04.2011    source sumber
comment
Anda harus menunjukkan kode MapItemizedOverlays.   -  person RoflcoptrException    schedule 21.04.2011
comment
Anda harus menggunakan konstruktor yang berbeda. Bisakah Anda menunjukkan bagaimana Anda menginisialisasi kelas ini?   -  person RoflcoptrException    schedule 21.04.2011


Jawaban (1)


Sepertinya mContext adalah nol.

person rajath    schedule 21.04.2011
comment
Ya, aku baru sadar. Apa yang harus saya masukkan sebagai konteksnya? Saat saya menggunakan MapDisplay.this, drawable tidak muncul di peta. - person Achint; 21.04.2011
comment
Lihat stackoverflow.com/questions/3879159/ untuk beberapa tips - person rajath; 21.04.2011
comment
Terima kasih. Saya mencoba memberikan this dan MapDisplay.this sebagai konteksnya. Sumber daya dapat digambar tidak ada, meskipun ketika saya mengeklik di tempat yang seharusnya, tindakan onTap diluncurkan. Apa yang salah dengan konteks yang saya berikan? - person Achint; 21.04.2011
comment
Terpecahkan, terima kasih atas bantuan Anda. Jika ada yang memiliki masalah yang sama, tambahkan sajaboundCenterBottom(defaultmarker) ke setiap panggilan super juga. - person Achint; 21.04.2011