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 Toast ที่แสดงข้อความบางส่วน แต่ก็ยังให้ปัญหาอยู่

แก้ไข: ขออภัย นี่คือรหัส

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

person Achint    schedule 21.04.2011    source แหล่งที่มา
comment
คุณต้องแสดงโค้ดของ MapItemizedOverlays   -  person RoflcoptrException    schedule 21.04.2011
comment
คุณต้องมีคอนสตรัคเตอร์ที่แตกต่างกัน คุณช่วยแสดงวิธีเริ่มต้นคลาสนี้ได้ไหม?   -  person RoflcoptrException    schedule 21.04.2011


คำตอบ (1)


ดูเหมือนว่า mContext จะเป็นโมฆะ

person rajath    schedule 21.04.2011
comment
เย้ ฉันเพิ่งเข้าใจ ฉันควรจะใส่อะไรเป็นบริบท? เมื่อฉันใช้ MapDisplay.this สิ่งที่วาดได้จะไม่แสดงบนแผนที่ - person Achint; 21.04.2011
comment
ดู stackoverflow.com/questions/3879159/ สำหรับเคล็ดลับบางประการ - person rajath; 21.04.2011
comment
ขอบคุณ ฉันพยายามให้ทั้งสิ่งนี้และ MapDisplay.this เป็นบริบท การถอนออกนั้นหายไป แม้ว่าเมื่อฉันคลิกที่ตำแหน่งที่ควรจะเป็น แต่การกระทำของ onTap ก็เริ่มขึ้น เกิดอะไรขึ้นกับบริบทที่ฉันให้? - person Achint; 21.04.2011
comment
แก้ไขแล้ว ขอบคุณสำหรับความช่วยเหลือของคุณ ในกรณีที่ใครประสบปัญหาเดียวกัน เพียงเพิ่ม boundCenterBottom(defaultmarker) ให้กับการโทรขั้นสูงทุกครั้งด้วย - person Achint; 21.04.2011