java - AlertBuilder 方法调用中的上下文参数

标签 java android android-alertdialog

我更喜欢组装代码,将警报创建到方法中并将其包装到单独的类中。

但是,不幸的是,在调用事件后,应用程序崩溃了,我认为这是因为方法中传递的上下文所致。请告诉我如何正确处理类中包装的方法中的上下文参数。

这是单独类中的方法:

 public void showAlertDialogWithTwoButtons(Context context, CharSequence title, CharSequence message, final DialogCallback callback) {
            this.context=context;
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);

            // set dialog message
            alertDialogBuilder
                    .setTitle(title.toString())
                    .setMessage(message.toString())
                    .setCancelable(false)
                    .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {
                            if (callback != null) {
                                callback.onClickYes();
                            }
                            dialog.cancel();
                        }
                    })
                    .setNegativeButton("No",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {
                            if (callback != null) {
                                callback.onClickNo();
                            }
                            dialog.cancel();
                        }
                    });

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

            // show it
            alertDialog.show();
        }

这是MainActivity中的方法调用:

if (id == R.id.action_hide) {
    alertBuiders.showAlertDialogWithTwoButtons(MainActivity.this, "Wanna hide?", "Do you want to hide?", new DialogCallback() {
        @Override
        public void onClickYes() {
            hideApp();
        }
        @Override
        public void onClickNo() {
            return;
        }
    });
}

如何在MainActivity中调用它?

这是错误日志:

10-25 12:19:59.361 4929-4929/com.example.fedotarte.myfirstapplication E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                        Process: com.example.fedotarte.myfirstapplication, PID: 4929
                                                                                        java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.fedotarte.myfirstapplication.AlertBuiders.showAlertDialogWithTwoButtons(android.content.Context, java.lang.CharSequence, java.lang.CharSequence, com.example.fedotarte.myfirstapplication.DialogCallback)' on a null object reference
                                                                                            at com.example.fedotarte.myfirstapplication.MainActivity.onOptionsItemSelected(MainActivity.java:79)
                                                                                            at android.app.Activity.onMenuItemSelected(Activity.java:3435)
                                                                                            at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:360)
                                                                                            at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:194)
                                                                                            at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:110)
                                                                                            at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:110)
                                                                                            at android.support.v7.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:69)
                                                                                            at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:204)
                                                                                            at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:776)
                                                                                            at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:821)
                                                                                            at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
                                                                                            at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:968)
                                                                                            at android.support.v7.view.menu.MenuPopup.onItemClick(MenuPopup.java:127)
                                                                                            at android.widget.AdapterView.performItemClick(AdapterView.java:318)
                                                                                            at android.widget.AbsListView.performItemClick(AbsListView.java:1165)
                                                                                            at android.widget.AbsListView$PerformClick.run(AbsListView.java:3134)
                                                                                            at android.widget.AbsListView$3.run(AbsListView.java:4049)
                                                                                            at android.os.Handler.handleCallback(Handler.java:789)
                                                                                            at android.os.Handler.dispatchMessage(Handler.java:98)
                                                                                            at android.os.Looper.loop(Looper.java:164)
                                                                                            at android.app.ActivityThread.main(ActivityThread.java:6541)
                                                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                                                            at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

最佳答案

试试这个

        // create alert dialog is wrong way remove this code
        AlertDialog alertDialog = alertDialogBuilder.create();

//写法是创建一个对话框 AlertDialog.BuilderalertDialogBu​​ilder = new AlertDialog.Builder(context).create();

关于java - AlertBuilder 方法调用中的上下文参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46928451/

相关文章:

java - 如何在 Talend 中处理错误和异常

java - 数独需要帮助构建可见矩阵

android - Libgdx中 Sprite 部分重叠检测

java - 使用 setError 进行编辑文本输入验证 Android

java - 使用 PDFBox 将 Type3 字体字符渲染为图像

java - 使用 JAVA API 查找知道电子邮件地址的 SMTP 主机和端口

java - 如何在 android ant 发布和调试构建期间附加不同的字符串资源文件?

android - GLES20.glUniform4fv 给出 GL_INVALID_OPERATION (1282)

java - Android onDismissListener 调用取消

android - 应用程序在执行 AlertDialog.Builder create() 方法时崩溃 - Android