Java 为什么((MainActivity)getActivity()会给我一个NullPointerException?

Java 为什么((MainActivity)getActivity()会给我一个NullPointerException?,java,android,nullpointerexception,Java,Android,Nullpointerexception,你好 我有以下代码: EventPopup.java class EventPopup extends Dialog { private boolean delete; private boolean edit; private boolean editall; private ReadEvent event; 。。。 } java(这是一个片段) MainActivity.java: public void refreshViewPager() { doubleViewPager

你好

我有以下代码:

EventPopup.java

class EventPopup extends Dialog {

private boolean delete;
private boolean edit;
private boolean editall;

private ReadEvent event;
。。。 }

java(这是一个片段)

MainActivity.java:

public void refreshViewPager() {
    doubleViewPager.getAdapter().notifyDataSetChanged();
}
为什么这一行有时在某些设备上给出NullPointerException(在其他设备上则不是)?:

错误消息是:

java.lang.NullPointerException:

在de.ubik.terminkalender.DayFragment$8$1.onDismiss(DayFragment.java:1378)

在android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1749)中

位于android.os.Handler.dispatchMessage(Handler.java:102)

位于android.os.Looper.loop(Looper.java:154)

位于android.app.ActivityThread.main(ActivityThread.java:6692)

位于java.lang.reflect.Method.invoke(本机方法)

在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1468)

位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)


我有以下结构:MainActivity(带viewpager)->DayFragment(作为片段)->Dialog。当我关闭对话框时,我想检查对话框中是否单击了按钮。单击后,在MainActivity中刷新viewpager。如何实现这一点?

onDismiss


这意味着您的对话框已被取消,它将自己与活动分离,这意味着
getActivity()
将返回null。最好找到另一种方法来刷新viewpager。如何执行此操作取决于刷新的原因。

onDismiss


这意味着您的对话框已被取消,它将自己与活动分离,这意味着
getActivity()
将返回null。最好找到另一种方法来刷新viewpager。如何执行此操作取决于刷新的原因。

正如@Deev所提到的,您将始终得到一个空值,解决方法是从某些以getActivity为参数的方法调用您的对话框

示例代码:

 //call this from your fragment 
 showDialog(getActivity());
在你的碎片里,这个地方

public void showDialog(final Activity activity){
    final EventPopup eventpopup = new EventPopup(activity, readevent);
        eventpopup.show();
        eventpopup.setOnDismissListener(new DialogInterface.OnDismissListener() {
            @Override
            public void onDismiss(DialogInterface dialogInterface) {

                if(eventpopup.getDelete()) {
                    ((MainActivity)activity).refreshViewPager();
                } else if (eventpopup.getEdit()) {
                    ((MainActivity) activity).doEditEvent(readevent, eventpopup.getEditAll());
                }
            }
        });
}

这肯定会起作用。

正如@Deev所提到的,您总是会得到一个空值,解决方法是从一些以getActivity为参数的方法调用您的对话框

示例代码:

 //call this from your fragment 
 showDialog(getActivity());
在你的碎片里,这个地方

public void showDialog(final Activity activity){
    final EventPopup eventpopup = new EventPopup(activity, readevent);
        eventpopup.show();
        eventpopup.setOnDismissListener(new DialogInterface.OnDismissListener() {
            @Override
            public void onDismiss(DialogInterface dialogInterface) {

                if(eventpopup.getDelete()) {
                    ((MainActivity)activity).refreshViewPager();
                } else if (eventpopup.getEdit()) {
                    ((MainActivity) activity).doEditEvent(readevent, eventpopup.getEditAll());
                }
            }
        });
}

这肯定会起作用。

我有以下结构:MainActivity(带viewpager)->DayFragment(作为片段)->Dialog。当我关闭对话框时,我想检查对话框中是否单击了按钮。单击后,在MainActivity中刷新viewpager。如何实现这一点?与其使用“refreshViewpager”回调,不如使用“buttonClicked”回调。该对话框将告诉活动该按钮已单击。然后活动将关闭对话框并刷新自己。当我关闭对话框时,我想检查对话框中是否单击了按钮。单击后,在MainActivity中刷新viewpager。如何实现这一点?与其使用“refreshViewpager”回调,不如使用“buttonClicked”回调。该对话框将告诉活动该按钮已单击。然后活动将关闭对话框并刷新自身。好的,我将尝试该操作。好的,我将尝试该操作