Android 单击AlertDialog中的按钮后,以意图启动新活动时出错

Android 单击AlertDialog中的按钮后,以意图启动新活动时出错,android,android-intent,onclick,Android,Android Intent,Onclick,我试着开始Place.Class,它显示了每个地方的更多细节 下面是关于映射的扩展映射活动。我还可以使用按钮创建AlertDialog查看更多详细信息。但它不工作。当我运行程序时,它在单击“查看更多详细信息”按钮后崩溃。我没有得到应有的结果。。我想一定是哪里出了问题。。可能在这里 Intent i=新的Intent(mContext,Place.class)//但我不知道如何修复它 你们知道吗?非常感谢你的帮助 PlaceItemizedOverlay public class Plac

我试着开始
Place.Class
,它显示了每个地方的更多细节

下面是关于映射的
扩展
映射活动
。我还可以使用按钮创建AlertDialog
查看更多详细信息。但它不工作。当我运行程序时,它在单击“查看更多详细信息”按钮后崩溃。我没有得到应有的结果。。我想一定是哪里出了问题。。可能在这里

Intent i=新的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;

        }


    }

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

看起来您的
光标c
为空。在您的
PlaceItemizedOverlay
中,我看到您声明了一个私有变量
c
,但您没有分配给它。
onClick
代码引用此变量,将如上所述崩溃

我猜您想从
AboutMap
活动中传入光标。是否可以将另一个参数添加到
PlaceItemizedOverlay
的构造函数中以共享光标

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

        }

是的,你说得对。我得到了它。非常感谢你。我想问你的最后一件事是,当我单击“查看更多详细信息”按钮时,每个位置都会立即弹出。这很奇怪。我想它显示只有一个地方,每一次点击和相同的标题,相同的信息。我想可能是因为McContext。但是,我不知道如何解决这个问题。你知道吗?无论如何,非常感谢您的好意我想这取决于您对Place活动的执行情况?你必须向任何人展示代码,让他们知道哪里出了问题。也许你可以创建一个新问题(与此评论流中的问题相反),并对其进行完整描述,这样人们就有更多的机会看到它并帮助你。:)我现在明白了…我有多蠢?哈哈,无论如何,非常感谢你
public PlaceItemizedOverlay(Drawable defaultMarker, Context context, Cursor cursor)
        {
            super(boundCenterBottom(defaultMarker));
            mContext = context;
            c = cursor;

        }