Java 警报对话框上的NPE

Java 警报对话框上的NPE,java,android,nullpointerexception,android-alertdialog,Java,Android,Nullpointerexception,Android Alertdialog,当我尝试按下警报对话框的按钮时,我的应用程序正在崩溃 public void lalalal(){ AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity()); // Setting Dialog Title alertDialog.setTitle("Confirm Delete..."); // Setting Dialog Message alertDialog

当我尝试按下
警报对话框的按钮时,我的应用程序正在崩溃

public void lalalal(){
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity());

    // Setting Dialog Title
    alertDialog.setTitle("Confirm Delete...");

    // Setting Dialog Message
    alertDialog.setMessage("Are you sure you want delete this?");

    // Setting Icon to Dialog
    alertDialog.setIcon(R.drawable.ic_ic);

    // Setting Positive "Yes" Button
    alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog,int which) {

            // Write your code here to invoke YES event
            Toast.makeText(getActivity(), "You clicked on YES", Toast.LENGTH_SHORT).show();
        }
    });

    // Setting Negative "NO" Button
    alertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            // Write your code here to invoke NO event
            Toast.makeText(getActivity(), "You clicked on NO", Toast.LENGTH_SHORT).show();
            dialog.cancel();
        }
    });

    // Showing Alert Message
    alertDialog.show();

}
我完全不明白为什么会发生这种事。!。。我已经看了很久了

至于错误日志:

  java.lang.NullPointerException
        at android.widget.Toast.<init>(Toast.java:105)
        at android.widget.Toast.makeText(Toast.java:261)
        at android.android.startingpoint.dp.test.ListHistoryFragment$2.onClick(ListHistoryFragment.java:138)
        at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:185)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:176)
        at android.app.ActivityThread.main(ActivityThread.java:5419)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:525)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
        at dalvik.system.NativeStart.main(Native Method)
java.lang.NullPointerException
在android.widget.Toast.(Toast.java:105)
位于android.widget.Toast.makeText(Toast.java:261)
位于android.android.startingpoint.dp.test.ListHistoryFragment$2.onClick(ListHistoryFragment.java:138)
位于com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:185)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:176)
位于android.app.ActivityThread.main(ActivityThread.java:5419)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:525)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
在dalvik.system.NativeStart.main(本机方法)

我在grepcode中查看了一些版本的
Toast
,并猜测您
getActivity()
返回
null

调用调用
makeToast()
的构造函数,该构造函数调用
Toast()
。构造函数的第二行看起来像:

    mTN.mY 
=context.getResources().getDimensionPixelSize(com.android.internal.R.dimen.toast_y_offset);

如果
context
(本例中的活动)为
null
,则肯定会产生NPE

我的猜测是,当您显示
对话框时,您的
片段将与
活动分离,这意味着
getActivity()
将返回null。您可能希望查看,以了解如何将其附加到父活动并将其分离

解决此问题的一种方法是使用
对话框
维护的
上下文
引用:

alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog,int which) {
        Toast.makeText(((Dialog) dialogInterface).getContext(), "You clicked on YES", Toast.LENGTH_SHORT).show();
    }
});

// Setting Negative "NO" Button
alertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
        Toast.makeText(((Dialog) dialogInterface).getContext(), "You clicked on NO", Toast.LENGTH_SHORT).show();
        dialog.cancel();
    }
});

请发布类
Toast
哪个是
ListHistoryFragment$2.onClick(ListHistoryFragment.java:138)
?@AlexR Toast是android框架的一部分` Toast.makeText(getActivity(),“你点击了是的”,Toast.LENGTH_SHORT.)`第138行是
getActivity()
返回的内容吗?非常有趣的是,知道进行否决表决的原因非常合理的答案。