我所有的popupwindow写在一个类里面,现在要从这个类的一个button点击事件跳到另外一个activity,出错了。
点击popupwindow里的一个button后后跳到ActivityB,
提示空指针,求解
                                  public void onClick(View v) {
// TODO Auto-generated method stub
pw.dismiss();
                                    Intent intent = new Intent();
                                    intent.setClass(v.getContext(),ActivityB.class);
System.out.println(intent);
startActivity(intent); 
                                          }
我打印intent,它不是空的,但在startActivity(intent)时出错。
错误信息如下:
02-21 10:38:17.088: ERROR/AndroidRuntime(280): FATAL EXCEPTION: main
02-21 10:38:17.088: ERROR/AndroidRuntime(280): java.lang.NullPointerException
02-21 10:38:17.088: ERROR/AndroidRuntime(280):     at android.app.Activity.startActivityForResult(Activity.java:2817)
02-21 10:38:17.088: ERROR/AndroidRuntime(280):     at android.app.Activity.startActivity(Activity.java:2923)
02-21 10:38:17.088: ERROR/AndroidRuntime(280):     at com.confpad.calendar.Calendar_popup_window$4.onClick(Calendar_popup_window.java:137)
02-21 10:38:17.088: ERROR/AndroidRuntime(280):     at android.view.View.performClick(View.java:2408)
02-21 10:38:17.088: ERROR/AndroidRuntime(280):     at android.view.View$PerformClick.run(View.java:8816)
02-21 10:38:17.088: ERROR/AndroidRuntime(280):     at android.os.Handler.handleCallback(Handler.java:587)
02-21 10:38:17.088: ERROR/AndroidRuntime(280):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-21 10:38:17.088: ERROR/AndroidRuntime(280):     at android.os.Looper.loop(Looper.java:123)
02-21 10:38:17.088: ERROR/AndroidRuntime(280):     at android.app.ActivityThread.main(ActivityThread.java:4627)
02-21 10:38:17.088: ERROR/AndroidRuntime(280):     at java.lang.reflect.Method.invokeNative(Native Method)
02-21 10:38:17.088: ERROR/AndroidRuntime(280):     at java.lang.reflect.Method.invoke(Method.java:521)
02-21 10:38:17.088: ERROR/AndroidRuntime(280):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-21 10:38:17.088: ERROR/AndroidRuntime(280):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-21 10:38:17.088: ERROR/AndroidRuntime(280):     at dalvik.system.NativeStart.main(Native Method)

解决方案 »

  1.   

      com.confpad.calendar.Calendar_popup_window$4.onClick(Calendar_popup_window.java:137) 
    把这行代码贴出来看看。应该是哪个变量没有赋值。
      

  2.   

    public class Calendar_popup_window extends Activity {public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    }
    public void showOptionPopup(Context context, final int location_id,
    String page_type) {
                   final Event event = event_list_use.get(location_id); LayoutInflater inflater = (LayoutInflater) context
    .getSystemService(LAYOUT_INFLATER_SERVICE);
    final View vPopupWindow = inflater.inflate(
    R.layout.calendar_program_list_option_popup, null);
    final PopupWindow pw = new PopupWindow(vPopupWindow, 350, 320, true);
                    TextView enter = (TextView) vPopupWindow
    .findViewById(R.id.TextView_calendar_option_enter);
                   enter.setOnClickListener(new OnClickListener() { @Override
    public void onClick(View v) {
                              pw.dismiss();
                             intent.setClass(v.getContext(),Calendar_my_calendar.class);
                             startActivity(intent);   
                           }
                   }}
    }Calendar_my_calendar.class和当前的这个类在一个包下,我的这个Calendar_popup_window一个公共的类,它里面写了多个popupwindow的创建,其他的activity调用这个类里面的某个方法来显示一个popupwindow,不知道这里能否用intent进行acitivty之间的跳转!谢谢
      

  3.   

    public class Calendar_popup_window extends Activity {public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    }
    public void showOptionPopup(Context context, final int location_id,
    String page_type) {
      final Event event = event_list_use.get(location_id);LayoutInflater inflater = (LayoutInflater) context
    .getSystemService(LAYOUT_INFLATER_SERVICE);
    final View vPopupWindow = inflater.inflate(
    R.layout.calendar_program_list_option_popup, null);
    final PopupWindow pw = new PopupWindow(vPopupWindow, 350, 320, true);
      TextView enter = (TextView) vPopupWindow
    .findViewById(R.id.TextView_calendar_option_enter);
      enter.setOnClickListener(new OnClickListener() {@Override
    public void onClick(View v) {
      pw.dismiss();
      intent.setClass(v.getContext(),Calendar_my_calendar.class);
      startActivity(intent);  
      }
      }}
    }Calendar_my_calendar.class 和当前的这个类在一个包下,我的这个Calendar_popup_window一个公共的类,它里面写了多个popupwindow的创建,其他的 activity调用这个类里面的某个方法来显示一个popupwindow,不知道这里能否用intent进行acitivty之间的跳转!谢谢
      

  4.   

     startActivity(intent);  v.getContext.startActivity();??是嚒, 
      

  5.   

    从trace上看,是挂在这行了:
    startActivity(intent);而最后调到的framework下的启动代码:public void startActivityForResult(Intent intent, int requestCode) {
            if (mParent == null) {
                Instrumentation.ActivityResult ar =
                    mInstrumentation.execStartActivity(
                        this, mMainThread.getApplicationThread(), mToken, this,
                        intent, requestCode);
                if (ar != null) {
                    mMainThread.sendActivityResult(
                        mToken, mEmbeddedID, requestCode, ar.getResultCode(),
                        ar.getResultData());
                }
                if (requestCode >= 0) {
                    // If this start is requesting a result, we can avoid making
                    // the activity visible until the result is received.  Setting
                    // this code during onCreate(Bundle savedInstanceState) or onResume() will keep the
                    // activity hidden during this time, to avoid flickering.
                    // This can only be done when a result is requested because
                    // that guarantees we will get information back when the
                    // activity is finished, no matter what happens to it.
                    mStartedActivity = true;
                }
            } else {
                mParent.startActivityFromChild(this, intent, requestCode);
            }
        }
    官方源代码的2817行就是这个:
    Instrumentation.ActivityResult ar =
                    mInstrumentation.execStartActivity(
                        this, mMainThread.getApplicationThread(), mToken, this,
                        intent, requestCode);
    这里可能为null的很多啊:
    mMainThread
    mToken
    intent不过应该都不可能是空的。另外:
    你的popwindow,是不是要一个setOnDismissListener啊
    不然pw.dismiss();
    后,谁去处理onDismiss()啊?
      

  6.   

    写了它的intent的跳转写在setOnDismissListener里面还是会报相同的错误。
      

  7.   

    碰到了和楼主一样的问题,把 startActivity(intent);改成 v.getContext().startActivity(intent);试试,我成功了。
      

  8.   


    public void showOptionPopup(Context context, final int location_id,
    String page_type) {
      final Event event = event_list_use.get(location_id);LayoutInflater inflater = (LayoutInflater) context
    .getSystemService(LAYOUT_INFLATER_SERVICE);
    final View vPopupWindow = inflater.inflate(
    R.layout.calendar_program_list_option_popup, null);
    final PopupWindow pw = new PopupWindow(vPopupWindow, 350, 320, true);
      TextView enter = (TextView) vPopupWindow
    .findViewById(R.id.TextView_calendar_option_enter);
      enter.setOnClickListener(new OnClickListener() {@Override
    public void onClick(View v) {
      pw.dismiss();
      intent.setClass(v.getContext(),Calendar_my_calendar.class);
      startActivity(intent);  
      }
      }}
    startActivity改成context.startActivity,同时,showOptionPopup的参数Context context改称final Context context
      

  9.   

    startActivity改成((Activity)context).startActivity
      

  10.   

    为什么我点击popupwindow中的textView后,不跳转,而且原来的Activity不反应了
      

  11.   

    v.getContext(), 这句有问题吧
    改成pw.getContext 或者Calendar_popup_window.this
    试试