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()
返回的内容吗?非常有趣的是,知道进行否决表决的原因非常合理的答案。