警告对话框null在侦听器方法内,空指针

时间:2013-09-27 07:04:40

标签: java android user-interface alert actionlistener

我在我创建的自定义侦听器中放置一个警告对话框,它就像一个onClick侦听器。在另一个类中发生事件时调用侦听器。

当我把警报对话框代码放在监听器回调方法里面时,为什么空指针?我怎样才能解决这个问题?更重要的是。为什么我得到空指针?

侦听器在此Android java类中调用onResultReturned的回调方法,当发生这种情况时,我希望出现警告对话框。

奇怪的是,这个警告对话框代码在我的回调方法之外工作正常,就像我把它放在onCreate方法中一样

我所在的活动是StartActivity,而onReturnResult方法在此类中,另一个名为Synchronizer的活动是侦听器的接口所在的位置。

堆栈跟踪;

09-27 16:08:42.300: E/AndroidRuntime(7195): FATAL EXCEPTION: main
09-27 16:08:42.300: E/AndroidRuntime(7195): java.lang.NullPointerException
09-27 16:08:42.300: E/AndroidRuntime(7195):     at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:132)
09-27 16:08:42.300: E/AndroidRuntime(7195):     at android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:65)
09-27 16:08:42.300: E/AndroidRuntime(7195):     at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)
09-27 16:08:42.300: E/AndroidRuntime(7195):     at android.app.AlertDialog$Builder.<init>(AlertDialog.java:359)
09-27 16:08:42.300: E/AndroidRuntime(7195):     at .StartActivity.onResultReturned(StartActivity.java:100)
09-27 16:08:42.300: E/AndroidRuntime(7195):     at .Synchronizer$SendOutMsgAndPack$2.run(Synchronizer.java:159)
09-27 16:08:42.300: E/AndroidRuntime(7195):     at android.os.Handler.handleCallback(Handler.java:605)
09-27 16:08:42.300: E/AndroidRuntime(7195):     at android.os.Handler.dispatchMessage(Handler.java:92)
09-27 16:08:42.300: E/AndroidRuntime(7195):     at android.os.Looper.loop(Looper.java:137)
09-27 16:08:42.300: E/AndroidRuntime(7195):     at android.app.ActivityThread.main(ActivityThread.java:4424)
09-27 16:08:42.300: E/AndroidRuntime(7195):     at java.lang.reflect.Method.invokeNative(Native Method)
09-27 16:08:42.300: E/AndroidRuntime(7195):     at java.lang.reflect.Method.invoke(Method.java:511)
09-27 16:08:42.300: E/AndroidRuntime(7195):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)

我的onResultReturned回调方法的代码,通常在创建活动后大约4到5秒调用

    @Override
public void onResultReturned(int result) {

     // build allertdialog
     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(StartActivity.this);


     // set title
     alertDialogBuilder.setTitle("update status"); 
    //set allert message
     alertDialogBuilder
     .setMessage("update success")
     .setCancelable(false)
     .setPositiveButton("OK",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int id) {
                // if this button is clicked, close
                // current activity
                //StartActivity.this.finish();
            }
          });

        // create alert dialog
        AlertDialog alertDialog = alertDialogBuilder.create();

        // show it
        alertDialog.show();

}

1 个答案:

答案 0 :(得分:1)

检查您的上下文 - (StartActivity.this)

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(StartActivity.this);

也许Context是null;