在一个空对象引用上调用android.support.v4.app.FragmentManager.beginTransaction()

4
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: websters.smartindiaserviceapp, PID: 3320
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{websters.smartindiaserviceapp/websters.smartindiaserviceapp.Activities.WelcomeActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v4.app.FragmentTransaction android.support.v4.app.FragmentManager.beginTransaction()' on a null object reference
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                      at android.app.ActivityThread.-wrap11(ActivityThread.java)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:148)
                      at android.app.ActivityThread.main(ActivityThread.java:5417)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                   Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v4.app.FragmentTransaction android.support.v4.app.FragmentManager.beginTransaction()' on a null object reference
                      at android.support.v4.app.DialogFragment.dismissInternal(DialogFragment.java:200)
                      at android.support.v4.app.DialogFragment.dismiss(DialogFragment.java:171)
                      at websters.smartindiaserviceapp.Activities.WelcomeActivity.onCreate(WelcomeActivity.java:51)
                      at android.app.Activity.performCreate(Activity.java:6237)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                      at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:148) 
                      at android.app.ActivityThread.main(ActivityThread.java:5417) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616

当我试图关闭活动中的自定义对话框时,我遇到了这个异常。

public class CustomDialog extends DialogFragment {

   public static CustomDialog newInstance() {
        return new CustomDialog();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.dialog, container, false);
        Glide.with(this).load(R.drawable.loader).placeholder(R.drawable.loader)
                //.dontAnimate()
                .into((ImageView) v.findViewById(R.id.progress));
        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

        if (getDialog() == null)
            super.setShowsDialog (false);
        return v;
    }

}

这是一个关于自定义对话框的类。
我正在使用以下代码显示对话框: CustomDialog.newInstance().show(getSupportFragmentManager(),"Dialog"); 对话框正常显示。
但是,当我尝试使用以下代码关闭对话框时:CustomDialog.newInstance().dismiss(); 我遇到了异常。请告诉我我的错误在哪里,如何关闭对话框。

你的问题不在于对话框(据我所知),而是在于WelcomeActivity。你正在调用一个尚未初始化的对象上的beginTransaction()方法。 - TheAnonymous010
可能是什么是NullPointerException,我该如何修复它?的重复问题。 - TheAnonymous010
CustomDialog.newInstance().show(getSupportFragmentManager(),"Dialog"); 我在Asynk任务的onPreexcute中调用它,我能够显示对话框,但是当我尝试CustomDialog.newInstance().dismiss();时,我会得到异常。 - Maklee Lee
3个回答

4

newInstance每次都会给你一个新的引用。

像这样初始化您的对话框:

CustomDialog customDialog = CustomDialog.newInstance(); 
customDialog.show(getSupportFragmentManager(),"Dialog");

使用以下方法进行解雇

customDialog.dismiss();

1
问题的原因是:

CustomDialog.newInstance().dismiss();

因为需要使用两个Fragment实例,一个用于显示对话框,另一个用于关闭它。

使用相同的Fragment实例,该实例由返回

CustomDialog dialogFrag=CustomDialog.newInstance();
dialogFrag.show(getSupportFragmentManager(),"Dialog");

解除为:

dialogFrag.dismiss();

0

看起来你在调用newInstance()函数以关闭对话框,该函数会返回一个新的对话框实例。尝试使用已经显示的那个实例来关闭对话框。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接