2011-09-04 52 views
0

我尝试启动Place.Class,其中显示每个位置的更多详细信息。单击AlertDialog中的按钮后,用Intent启动新活动的错误

以下在这里我有AboutMap延伸MapActivity。我也创建AlertDialog与按钮See more detail在这里。但它不工作。当我运行程序时,点击See more detail按钮后崩溃。我并没有得到确切的结果,它应该..我想那一定是错的地方..可能是这里

Intent i = new Intent(mContext, Place.class); //但我不知道如何解决它

待办事项你们有什么想法?谢谢你这么多的帮助

PlaceItemizedOverlay

public class PlaceItemizedOverlay extends ItemizedOverlay<OverlayItem> { 

     private Context mContext; 

     private Cursor c; 

     private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 

     public PlaceItemizedOverlay(Drawable defaultMarker, Context context) 
     { 
      super(boundCenterBottom(defaultMarker)); 
      mContext = context; 

     } 
     public PlaceItemizedOverlay(Context context) 
     { 
      super(boundCenterBottom(null)); 
      mContext = context; 

     } 
     public void addOverlay(OverlayItem overlay) { 
      mOverlays.add(overlay); 
      populate(); 
     } 

     @Override 
     protected OverlayItem createItem(int i) { 
      return mOverlays.get(i); 
     } 

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


     @Override 
     protected boolean onTap(int index) { 

    //Create AlertDialog 
      final OverlayItem oi = mOverlays.get(index); 
      AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); 
      dialog.setTitle(oi.getTitle()); 
      dialog.setMessage(oi.getSnippet()); 
      dialog.setNegativeButton("Back", null); 
    //Create See more detail Button 
      dialog.setPositiveButton("See More Detail", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int id) { 
     //Line 87: Logcat tell that there are some problem around here 
        Intent i = new Intent(mContext, Place.class); 
        i.putExtra(Constants.KEY_ID, c.getInt(
          c.getColumnIndex(Constants.KEY_ID))); 
        i.putExtra(Constants.COL_TITLE, c.getString(
          c.getColumnIndex(Constants.COL_TITLE))); 
        i.putExtra(Constants.COL_ADDRESS, c.getString(
          c.getColumnIndex(Constants.COL_ADDRESS))); 
        i.putExtra(Constants.COL_CONTENT, c.getString(
          c.getColumnIndex(Constants.COL_CONTENT))); 
        mContext.startActivity(i); 
      }}); 
      dialog.show(); 
      return true; 

     } 


    } 

​​

public class AboutMap extends MapActivity { 

    MapView mapView; 
    MapController mapController; 
    private static MyDB mDbHelper; 
    private Cursor c; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.aboutcm); 

     mDbHelper = new MyDB(this); 
     mDbHelper.createDatabase(); 
     mDbHelper.open(); 
     c = mDbHelper.getAttraction(); 



     mapView = (MapView) findViewById(R.id.mapview); 
     mapController = mapView.getController(); 
     Drawable drawable = this.getResources().getDrawable(R.drawable.map_pin_3); 
     List<Overlay> mapOverlays = mapView.getOverlays(); 
     PlaceItemizedOverlay itemizedoverlay = new PlaceItemizedOverlay(drawable, this); 

     mapController.setZoom(13); 
     mapView.setBuiltInZoomControls(true); 


     c.moveToFirst(); 
     do { 
      String title = c.getString(c 
        .getColumnIndex(Constants.COL_TITLE)); 
      String address = c.getString(c 
        .getColumnIndex(Constants.COL_ADDRESS)); 
      int latitude = (int) (c.getDouble(c 
        .getColumnIndex(Constants.COL_LA)) * 1E6); 
      int longitude = (int) (c.getDouble(c 
        .getColumnIndex(Constants.COL_LONG)) * 1E6); 

      itemizedoverlay.addOverlay(new OverlayItem(new GeoPoint(latitude, longitude), title, 
        address)); 

      mapOverlays.add(itemizedoverlay); 


     } while (c.moveToNext()); 


    } 


    @Override 
    protected boolean isRouteDisplayed() { 
     // TODO Auto-generated method stub 
     return false; 
    } 



} 

Logcat

09-04 14:31:29.019: DEBUG/AndroidRuntime(975): Shutting down VM 
09-04 14:31:29.029: WARN/dalvikvm(975): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
09-04 14:31:29.029: ERROR/AndroidRuntime(975): Uncaught handler: thread main exiting due to uncaught exception 
09-04 14:31:29.069: ERROR/AndroidRuntime(975): java.lang.NullPointerException 
09-04 14:31:29.069: ERROR/AndroidRuntime(975):  at com.ctg.PlaceItemizedOverlay$1.onClick(PlaceItemizedOverlay.java:87) 
09-04 14:31:29.069: ERROR/AndroidRuntime(975):  at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158) 
09-04 14:31:29.069: ERROR/AndroidRuntime(975):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-04 14:31:29.069: ERROR/AndroidRuntime(975):  at android.os.Looper.loop(Looper.java:123) 
09-04 14:31:29.069: ERROR/AndroidRuntime(975):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
09-04 14:31:29.069: ERROR/AndroidRuntime(975):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-04 14:31:29.069: ERROR/AndroidRuntime(975):  at java.lang.reflect.Method.invoke(Method.java:521) 
09-04 14:31:29.069: ERROR/AndroidRuntime(975):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
09-04 14:31:29.069: ERROR/AndroidRuntime(975):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
09-04 14:31:29.069: ERROR/AndroidRuntime(975):  at dalvik.system.NativeStart.main(Native Method) 
09-04 14:31:29.099: INFO/Process(53): Sending signal. PID: 975 SIG: 3 

回答

1

看起来您的Cursor c为空。在你的PlaceItemizedOverlay我看到你已经声明了一个私有变量c,但你还没有分配到任何地方。 onClick代码引用这个变量,并且会像上面那样崩溃。

我想你想从你的AboutMap活动中传递你的光标。也许在PlaceItemizedOverlay的构造函数中添加另一个参数来共享光标?

public PlaceItemizedOverlay(Drawable defaultMarker, Context context, Cursor cursor) 
     { 
      super(boundCenterBottom(defaultMarker)); 
      mContext = context; 
      c = cursor; 

     } 
+0

是的,你说得对。我知道了。非常感谢。我最后要问的是,当我点击“查看更多详细信息按钮”,但是,每个地方都会立即弹出。这很奇怪。我想要显示只有一个点击和相同的标题,相同的信息。 我认为这可能是因为mContext。但是,我不知道如何解决这个问题。你有什么主意吗?无论如何,非常感谢您的好意 –

+0

我想这取决于您对Place活动的实施吗?你将不得不向任何人展示代码,以查看发生了什么问题。也许你可以创建一个新的问题(而不是在这个评论流中)并完全描述它,所以人们有更多的机会看到它并帮助你。 :) – antonyt

+0

我现在明白了......我是多么愚蠢?无论如何,大声笑,非常感谢你 –

相关问题