0

作成したカスタム リスナー内にアラート ダイアログを配置しました。これは onClick リスナーのようなものです。リスナーは、別のクラスでイベントが発生したときに呼び出されます。

アラート ダイアログ コードをリスナー コールバック メソッド内に配置すると、null ポインターが表示されるのはなぜですか? どうすればこれを修正できますか? そして更に重要なことに。null ポインターを取得するのはなぜですか?

リスナーは、この 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)

通常、アクティビティが作成されてから約 4 ~ 5 秒後に呼び出される onResultReturned コールバック メソッドのコード

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

}

4

1 に答える 1

1

コンテキストを確認してください - (StartActivity.this) で

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

おそらく Context は null です。

于 2013-09-27T07:20:41.890 に答える